两个概念:
<T> T类型形参
<String> String是实际类型参数
并不存在泛型类
我们所说的泛型类是逻辑上的,物理上是不存在,
List<String> a = new ArrayList <String>();
List<Integer> b = new ArrayList <Integer>();
System.out.print(a.getClass() == b.getClass());//打印的结果是 "true"
List<Integer> b = new ArrayList <Integer>();
System.out.print(a.getClass() == b.getClass());//打印的结果是 "true"
因为List<String> 和 List<Integer>是同种类,他们在内存中是占用同一块内存,
所有静态域,静态方法,静态初始化块,是不允许使用泛型的。
static T info;
public static T getCount(){}
//以上两个都是错误的,静态XX是不允许使用泛型,因为他们是使用一块内存的,作为类变量和类方法是共享的,所以不能因T的改变而改变,故使用泛型编程是不合法的。
public static T getCount(){}
//以上两个都是错误的,静态XX是不允许使用泛型,因为他们是使用一块内存的,作为类变量和类方法是共享的,所以不能因T的改变而改变,故使用泛型编程是不合法的。
从泛型类派生子类
不能带类型形参。只能带实际类型参数。注意:String 是 Object的子类。但是 List<String> 不是 List<Object>的子类。
数组和泛型
数组的父类只能是数组或者Object有类 A BB extends AB[] 不是 A或者B的子类B[] 是A[]的子类 也是Object的子类G<A> 和G<B>G<B> 不是G<A> 的子类,这是泛型在继承上与数组的不同之处
类型通配符 "?"
利用类型通配符目的是来表示泛型的父类
例如: List<?> 是List<T>(T是任何类型) 的父类。 "?"是可以匹配任何类型的。
List<?> 只是用来表示父类,List<?> a a.add(new Object()); 这个是不合法的,因为根本就不知道a 里面是什么类型,所以不能进行add操作。
设定通配符的上限 List<? extends shaps>
List<? extends shaps> 缩小了? 的范围 只能是shaps本身,或者是shaps的派生子类。
public void do (List<?> shaps){
Shaps myShaps =(Shaps) shaps.get(0);//要进行类型转换,比较繁琐
myShaps.paint();//调用shaps的一个方法;
}
public void do (List<? extends Shaps> shaps){
shaps.get(0).paint();//不用进行强制类型转换,利用多态,shaps 是Shaps 或者Shaps子类实例,都可以不用强制类型转换就可以调用paint()方法。
}
Shaps myShaps =(Shaps) shaps.get(0);//要进行类型转换,比较繁琐
myShaps.paint();//调用shaps的一个方法;
}
public void do (List<? extends Shaps> shaps){
shaps.get(0).paint();//不用进行强制类型转换,利用多态,shaps 是Shaps 或者Shaps子类实例,都可以不用强制类型转换就可以调用paint()方法。
}
注意:同 "?"一样 "List<? extends a> " a.add(new Shaps()); 也是不合法的,因为不能准确知道子类类型。
总之:使用 通配符"?" 类型就是未知,所以不能add进去
设定类型形参的上限 List<T extends shaps>
List<T extends shaps & java.io.serializable>
还可以这样子,用&实现多个限制,
相关推荐
2006/01/01 <br><br>本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...
2006/01/01 <br><br>本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...
主要关于泛型应用、原理、协变逆变、泛型缓存等相关方面的知识需要的可以下载学习
集合与泛型知识点的总结
泛型是jdk1.5之后的java新特性,这里有详细的解析,希望对大家有用
Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 ...
Java泛型简明教程 泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员...这就是为什么我想使用一种最简单的形式来总结一下程序员需要知道的关于Java泛型的最基本的知识。
第8章 内部类和泛型;回顾;本章内容;8.1 内部类;8.1.1 内部类概述;8.1.2 内部类使用;8.1.2 内部类使用;8.1.3 学生实践练习;8.1.3 学生实践练习;8.1.3 学生实践练习;8.1.3 学生实践练习;8.1.3 学生实践练习;...总结
Java异常,泛型,反射,IO,注解
基本操作 Java基础 面向对象 多线程 String类 集合 IO socket网络编程 反射 泛型 你想要的通通都在这里
基础 知识点/面试题总结 : (必看 ): ...IO 基础知识总结 IO 设计模式总结 IO 模型详解 并发 知识点/面试题总结 : (必看 ) Java 并发常见知识点&面试题总结(上) Java 并发常见知识点&面试题总结(中) Java 并
基础 知识点/面试题总结 : (必看 ): ...IO 基础知识总结 IO 设计模式总结 IO 模型详解 并发 知识点/面试题总结 : (必看 ) Java 并发常见知识点&面试题总结(上) Java 并发常见知识点&面试题总结(中) Jav
java并发源码集合
C++预备知识 泛型编程与OOP(面向对象编程)目标相同,即时重用代码和抽象通用的概念更简单。 OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定的数据类型。 术语泛型(generic)指的是创建独立于类型...
Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 (information [,infә'meiʃәn] ) ...
使用泛型编写算法 测试算法性能 插入排序 插入排序改进 高级排序算法 归并排序 归并排序改进 归并排序自底向上 快速排序 随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础...
本文档总结javaOOP所有关键知识,包括java基础知识、面向对象、常用API、多线程、集合、IO、泛型、枚举、反射、注解等概念性知识。
资源内容:01委托的基本认识,02委托的基本应用,03委托的基本应用练习与总结,04_02自己写泛型委托,04_03Action泛型委托,04泛型委托,05泛型委托Func,06多播委托,07匿名方法,08Lambda表达式简介之输入参数,09匿名方法、...
包括基础语法、面向对象、异常处理、数组、常用类、容器、IO、反射、枚举类型与泛型、线程、网络、GUI等知识点总结和小例子,另外还附加了J2EE的Servlet、JSP、EL表达式、JSTL标签库、JavaBean的一些知识点,该文档...
Java核心基础知识总结,含思维导图,包含Java基本语法,面向对象,接口和抽象类,异常,内部类,集合,泛型,反射,枚举,I/O,注解等Java基础核心知识,总结全面,内容丰富,欢迎下载。 如果对你有用,麻烦点个收藏...