`
roway
  • 浏览: 50646 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第十二:泛型(下)

 
阅读更多

一:

受限制的类型参数

泛型机制允许开发者对类型参数进行附加约束(T extends List............)

public class ListGenericFoo<T extends List> {
	private T[] fooArray;

	public T[] getFooArray() {
		return fooArray;
	}

	public void setFooArray(T[] fooArray) {
		this.fooArray = fooArray;
	}

	public static void main(String[] args) {
		ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>();
		ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>();

		LinkedList[] linkedList = new LinkedList[10];
		foo1.setFooArray(linkedList);

		ArrayList[] arrayList = new ArrayList[10];
		foo2.setFooArray(arrayList);
		
		//HashMap不是List的子类或者实现类
		//ListGenericFoo<HashMap> foo3=new ListGenericFoo<HashMap>();
	}
}


二:

自己实现一个简单的集合

//自己实现一个简单的集合 
public class SimpleCollection<T extends Object> {
	private T[] objArr;// 数组

	private int index = 0;

	public SimpleCollection() {
		objArr = (T[]) new Object[10];// 初始化这个数组...默认大小为10
	}

	public SimpleCollection(int capacity) {
		objArr = (T[]) new Object[capacity];// 给定大小初始化数组
	}

	// 添加一个元素
	public void add(T t) {
		objArr[index] = t;
		index++;
	}

	// 获取集合中有多少元素
	public int getLength() {
		return index;
	}

	// 获取指定的元素
	public T get(int i) {
		return objArr[i];
	}

	//获取此集合的大小
	public int size(){
		return objArr.length;
	}
	public static void main(String args[]) {
		SimpleCollection<Integer> c = new SimpleCollection<Integer>();
		for (int i = 0; i < 10; i++) {
			System.out.println("<<<<<<<<<<<<<<<<<<<<<<"+c.getLength());
			System.out.println(">>>>>>>>>>>>>>>>>>>>>>"+c.size());
			c.add(new Integer(i));// 自动装箱与自动拆箱
		}
		for (int i = 0; i < 10; i++) {
			System.out.println(c.get(i));
		}
	}
}


三:

灵活应用,思路清晰!!!

四:

通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。

五:

GenericTest.java中的问题:》》》》》》》》》》》》》》》》》》重点理解!!!!!!!!

使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來取得所参考实例的信息,
或者是移除某些信息(设置为null),但不能增加它的信息,因为只知道当中放置的是SomeClass的子类,
但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,

然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。

public class GenericTest<T> {
	private T foo;

	public T getFoo() {
		return foo;
	}

	public void setFoo(T foo) {
		this.foo = foo;
	}

	public static void main(String[] args) {
		GenericTest<? extends List> ge = null;
		ge = new GenericTest<ArrayList>();
		ge = new GenericTest<LinkedList>();
		// ge=new GenericTest<HashMap>();//把它限制了

		GenericTest<?> g = null;
		g = new GenericTest<HashMap>();

		GenericTest<? super List> ge2 = null;// 这个啥意思...List以及List上面的!!!
		ge2 = new GenericTest<Object>();
		// ge2=new GenericTest<ArrayList>();//把它限制了

		GenericTest<String> ge3 = new GenericTest<String>();
		ge3.setFoo("hello world");

		GenericTest<? extends Object> ge4 = ge3;
		System.out.println(ge4.getFoo());
		ge4.setFoo(null);//只能设置为null,不能设置为其他值...注意...
		// 因为你不知道是什么类型,如果你知道是什么类型,那就失去泛型类型参数化的意义了!
		System.out.println(ge4.getFoo());
		// ge4.setFoo("welcome");//这里为什么不行???重点理解!!!!!!

	}
}


六:

泛型类的继承

泛型类实现泛型接口

补充问题:我现在总结的一点小结论
1.在创建一个类的时候用T(绝对不可以使用?)
2.?可以在实例化对象和方法(参数)中使用


分享到:
评论

相关推荐

    JAVA-微讲堂01环境变量-陈冬

    讲:陈冬 第一课:计算机中的环境变量 第二课:认识JVM 安装JDK 第三课:认识JAVA中的变量 第三课:理解类与对象 第三课附加:值传递和对象传递 第四课:继承 ...第十二课:jdbc 第十三课:设计模式

    第12章 泛型1

    在第12章“泛型1”中,主要探讨了泛型的概念以及它们如何解决在使用集合时遇到的问题。 在没有泛型的情况下,例如存储调料的瓶子如果没有标签,我们很难区分装了什么调料,这可能导致混淆和错误。同样地,Java集合...

    JAVA语言与编程第7章容器和泛型.ppt

    JAVA语言与编程第7章容器和泛型.ppt

    06_第6章 泛型与集合1

    Java泛型与集合是Java编程中的重要组成部分,它们在提高代码可读性、安全性以及减少类型转换错误方面起到了关键作用。本章将深入探讨这两个概念及其应用。 首先,理解Java集合框架的结构至关重要。Java集合框架包括...

    HackerRank 30天代码:HackerRank 30天代码解决方案c#

    第一天:数据类型第2天:操作员第3天:条件语句简介第四天:课堂与实例第五天:循环第6天:让我们回顾一下第7天:阵列第8天:字典和地图第9天:递归3 第10天:二进制数第11天:2D阵列第十二天:继承第13天:抽象课...

    JAVA-Study:JAVA学习

    根据Kiseon Paik的Live Java Study课程进行的个人学习 第一周:什么是JVM,Java代码...第十周:多线程编程 第11周的任务:枚举 第12周的作业:注释 第13周的挑战:I / O 第14周的任务:泛型 第15周的任务:Lambda表达

    Java开发详解.zip

    031218_〖第12章:JAVA IO〗_实例操作—单人信息管理程序笔记.pdf 031219_〖第12章:JAVA IO〗_实例操作:投票程序笔记.pdf 031301_【第13章:Java类集】_认识类集、Collection接口笔记.pdf 031302_【第13章:Java类...

    MSDN_C#编程指南

    #### 二十二、如何:显式实现接口成员 - **实现步骤**:展示如何在类中显式实现接口成员。 #### 二十三、如何:使用继承显式实现接口成员 - **继承示例**:展示如何在一个继承自其他类的新类中显式实现接口成员。 ...

    Go语言101.pdf版

    * 第12章:表达式、语句和简单语句 * 第13章:基本流程控制语法 * 第14章:协程、延迟函数调用、以及恐慌和恢复 * 第15章:Go类型系统概述 - 精通Go编程必读 * 第16章:指针 * 第17章:结构体 * 第18章:值部 - 为了...

    Beginning Visual C# 2012 Programming(英文版)

    - **第12章:泛型**:泛型的定义、使用和泛型类与方法的创建。 - **第13章:额外的OOP 技术**:涵盖了接口、继承和多态等面向对象的高级特性。 - **第14章:C#语言增强**:讨论了C# 5.0和更高版本中引入的语言特性,...

    尚硅谷_宋红康_第12章节练习_泛型.doc

    在本教程中,宋红康老师讲解了Java编程的相关知识点,尤其强调了泛型的使用。泛型是Java中一种强大的类型系统工具,允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 首先,...

    跟汤老师学Java(第12季):枚举、泛型、内部类

    本课程从零开始,以通俗易懂...3.泛型简介 4.泛型类 5.泛型接口 6.泛型方法 7.泛型特性 8.内部类简介 9.成员内部类、局部内部类、静态内部类、匿名内部类 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    学习Java第二十四天–集合框架之泛型集合

    Java中的泛型是一种强大的工具,它允许我们在编程时指定集合(如List、Set、Map等)的元素类型,从而提供类型安全性和编译时的错误检查。在标题和描述中,我们关注的是“泛型集合”这个主题,它是Java集合框架的一...

    详细介绍C# 泛型

    在C#开发中,必不可少的要用到泛型。泛型是.NET2.0版本就有的,它广泛应用于C#框架中容器的使用中。下面我们来详细介绍一下。  一、泛型的主要优势  1....  2.... 3.... 二、泛型的基本使用 ... //去除第一个元素12 拆

    java开发实战经典第十二章课后习题答案

    《Java开发实战经典》是许多Java初学者的重要学习资料,其第十二章涵盖了诸多关键知识点。这章可能涉及了面向对象编程的深入理解、异常处理、集合框架的使用、多线程、网络编程或者IO流等内容。课后习题通常用于巩固...

    尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md

    尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md

    尚硅谷_宋红康_第12章_泛型.pdf

    本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...

Global site tag (gtag.js) - Google Analytics