泛型,即参数化类型,调用者需要传入一个或数个数据类型参数。
一、分类
1、泛型类
2、泛型方法
3、泛型接口
二、泛型的声明周期
泛型只作用于编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型相关信息擦除。编译后的字节码文件不含泛型信息,即不能进入运行时阶段。
三、泛型的一些限制、特性
1、传入的参数:必须是类或接口,不支持对象或基本数据类型;
2、泛型类中的泛型成员或方法不能是静态的;泛型方法可以为静态;
3、泛型存入和取出自动进行类型转换;
4、不能使用泛型父类或接口的引用,指向泛型子类或接口
四、泛型类
1、普通泛型类
public class GenericClass<K,V,S> {
K k;
V v;
S s;
//传入多个类实例
public GenericClass(K k,V v,S s){
this.k =k;
this.v = v;
this.s = s;
}
void display(){
System.out.println("实际类型是:"+k.getClass().getName());
System.out.println("实际类型是:"+v.getClass().getName());
System.out.println("实际类型是:"+s.getClass().getName());
}
public static void main(String[] args) {
//初始化泛型类
GenericClass<String,Integer,Character> st = new GenericClass<String,Integer,Character>("s",89,'4');
st.display();
}
}
2、限制泛型类
语法结构:
1) 上界限制 --T是FatherClass或其子类,且实现接口1、接口2
<T extends FatherClass & Interface1,Interface2>
2) 下界限制 --T必须是SonClass或其父类
<T super SonClass>
public class RestrictGenericClass<T extends FatherClass & Serializable> {
T t;
public RestrictGenericClass(T t){
this.t = t;
}
public void display(){
System.out.println("实际类型为:"+t.getClass().getName());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RestrictGenericClass<FatherClass> st = new RestrictGenericClass<FatherClass>(new FatherClass());
st.display();
}
}
3、原生态的不安全性-使用原生类型声明变量,应指明参数类型
//1、使用原生类型未指定参数带来的隐患
List li = new ArrayList<String>(); //未指明参数类型,默认为Object
li.add(1);
//2、直到运行阶段-取出使用时,才报类型转换错误
String s = (String)li.get(0);
System.out.println(s);
//3、正确用法,若要使用原生类型,应指明参数
List<String> li2 = new ArrayList<String>();
li2.add("s"); //编译报错只能增加add(String)
li2.remove("s");
System.out.println(li2.size());
4、通配符--用于未知类型
应用场景一:
GenericClass<String,Number>并不是GenericClass<Object,Object>的子类型,应用GenericClass<?,?>代替,注意不能添加或修改数据(除了添加null),只能查询;
应用场景二:
GenericClass<? extends Number> c1 = new GenericClass<Integer>(new Integer[]{1,2,3});
即一个父类或接口引用指向子类或接口实例(参数上为父子关系)。
相关推荐
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
Java Generics and Collections 英文版,详细描述java 泛型技术
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
java 泛型接口示例 java 泛型接口示例 java 泛型接口示例
主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
java泛型技术之发展,学习JAVA 泛型的不错东东
1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....
很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!
4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...
java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx
深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回
Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助
java泛型详解.pdf
JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;
思维导图之Java泛型详解
Java泛型技术之发展
JAVA泛型教程(帮你解决学习泛型的苦恼). Java 泛型编程可能会碰到很多问题,本教程可能会对你有帮助哦。