1. 例如对于 Pair<T extends Comparable> 或者
public static <T extends Object & Comparable<? super T>> T min(List<T> list),可以调用Class,Field, Method的getTypeParameters函数来获取泛型信息,而对于有继承关系的,例如 DateInternel extends Pair<Date>, 可以用Class对象的getGenericSuperclass或者getGenericInterfaces来获取泛型的类型。
2. 一般对泛型我们会讲到一个擦除问题。主要表现在子类显示覆盖父类某个方法后,会造成在子类中会出现两个参数类型不同的方法,一个是泛型类型擦除后的方法,而一个是子类中指定类型的方法,例如
public class DateInternel extends Pair<Date> {
public Date getSecond() {
return super.getSecond();
}
public void setSecond(Date second) {
if(second.compareTo(getFirst())>=0)
super.setSecond(second);
}
}
当编译完成后,DateInternel类会从父类Pair继承到下面两个方法
public Comparable getSecond() {...}
public void setSecond(Comparable second) {...}
对于get函数,返回值是无法作为函数标识的,这样会有函数同名的错误,而对于set函数,会导致当对DateInternel实例对象调用setSecond(Date second)和setSecond(Comparable second)的结果完全不同,针对这种情况,编译器会产生两个桥接方法来处理。
// Method descriptor #14 (Ljava/lang/Comparable;)V
// Stack: 2, Locals: 2
public bridge synthetic void setSecond(java.lang.Comparable arg0);
0 aload_0 [this]
1 aload_1 [arg0]
2 checkcast java.util.Date [31]
5 invokevirtual com.statestreet.sle.chris.corejava.generic.DateInternel.setSecond(java.util.Date) : void [15]
8 return
Line numbers:
[pc: 0, line: 1]
// Method descriptor #30 ()Ljava/lang/Comparable;
// Stack: 1, Locals: 1
public bridge synthetic java.lang.Comparable getSecond();
0 aload_0 [this]
1 invokevirtual com.statestreet.sle.chris.corejava.generic.DateInternel.getSecond() : java.util.Date [81]
4 areturn
Line numbers:
[pc: 0, line: 1]
桥接代码的大概形式如上,保证了在子类实例函数调用的结果一致性。
bridge方法的解释:bridge method may be created by the compiler when extending a parameterized type whose methods have parameterized arguments.
Synthetic关键字的解释:A class member that does not appear in the source code must be marked using a Synthetic attribute." Also, "The Synthetic attribute was introduced in JDK release 1.1 to support nested classes and interfaces
."
3.对于下面两个实例对象,他们的Class对象是同一对象。
Pair<Date> datePair = new Pair<Date>();
Pair<String> stringPair = new Pair<String>();
datePair.getClass()==stringPair.getClass()
4.泛型不能用于catch block中,例如
public <T> T handle(List<T> list) {
try {
...
} catch(T t) {...}
}
编译器会提示错误。
5.不能创建泛型数组,例如 Pair<Date> pairs = new Pair<Date>[10];
6.不能实例化泛型变量和获取泛型的类信息, 例如 new T() 或者 T.class
7.类中声明的泛型类型不能用于静态变量和静态方法,会有编译错误,例如
public class Pair<T> {
public static T t;
public static Pair<T> getInstance() {...}
}
8.泛型的继承规则,Employee和Manager是父类和子类,但是Pair<Employee>和Pair<Manager>没有任何关系。
分享到:
相关推荐
集合与泛型知识点的总结
Java泛型x详细知识点思维导图.xmind
Java高级知识点拆解,java内存,泛型,反射等,可以加V进行交流
1;继承一个泛型类时,必须为其传递泛型参数 public class Father,V> -------整个叫泛型 K,V ----泛型参数 2;定义子类时直接为父类泛型参数赋值 public class Son:Father,V> public class Son:...知识点 B:
C#控制台电话本小项目,存储txt记事本通信录项目,使用dictionary字典泛型知识点,实现添加,查询,修改,删除和退出等基本功能,代码简洁明了,可以直接运行,信息保存在txt记事本中,不是数据只存内存,后续关闭...
对泛型的简单举例,通过例子了解泛型这个知识点
Java泛型是一种强大的特性,它使得我们可以编写更加通用、类型安全的代码。通过使用泛型类、泛型方法以及通配符,...在实际开发中,合理利用泛型可以提高代码的可重用性和可维护性,是每个Java开发者应该掌握的知识点。
java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...
这是我在网络上学习所收获到的一些心得,想和大家分享一下。如有侵权或者错误请大家私信我,我会进行删除与修改。
该资源利用基础的链表结构,结合泛型和反射的知识点,实现重写LinkedList集合类,可以存放任意类型数据。比较推荐对Java有稳固基础的同学来阅读,为了方便阅读,代码的注释写的非常的清楚
我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射配置文件内容 7.通过反射越过泛型检查 8.其他一些文本笔记 读者需要补充的知识...
Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 ...
资源描述:Java面向对象知识点的思维导图 内容概要: 这个资源是一个Java面向对象知识点的思维导图,它涵盖了Java中面向对象编程的核心概念和重要知识点。导图中包含了类、对象、继承、多态、封装等基本概念,同时...
java详细的知识点整理,包括:jvm原理、IO、类加载过程、集合、线程、反射、泛型等java基础,spring原理、特点,微服务架构、数据库引擎、消息组件、算法、数据结构等。偏理论的知识较多,主要用于面试。
包括基础语法、面向对象、异常处理、数组、常用类、容器、IO、反射、枚举类型与泛型、线程、网络、GUI等知识点总结和小例子,另外还附加了J2EE的Servlet、JSP、EL表达式、JSTL标签库、JavaBean的一些知识点,该文档...
集中的知识点,适用于已经学过之后,快速过一遍复习(临时抱佛脚),比如面试前复习一下。不适用于没学过这些知识点的或者完全不懂英文的。包括spring注解,maven,git,java集合,泛型,jdk8,jvm参数,正则表达式...
·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千...
资源描述:Java面向对象知识点的思维导图 内容概要: 这个资源是一个Java面向对象知识点的思维导图,它涵盖了Java中面向对象编程的核心概念和重要知识点。导图中包含了类、对象、继承、多态、封装等基本概念,同时...
C#高级编程包含集合,泛型,事务,xml,wcf通信等相关知识点
初级中级C#程序员用到的知识点,C#基础源码,每个里面都有详细的解释,算是学习工作帮助很大的工具 资源内容:01委托的基本认识,02委托的基本应用,03委托的基本应用练习与总结,04_02自己写泛型委托,04_03Action泛型委托,...