public class VP { public <T> void printMsg(T... args){ for (T t:args){ System.out.println("泛型测试:"+t); } for (int i=0;i<args.length;i++){ System.out.println("测试:"+args[i]); }//结论:可以通过遍历数组的方式遍历数组,可变参数是利用数组实现的 } public static voi
JDK1.5开始实现了对泛型的支持,但是java对泛型支持的底层实现采用的是类型擦除的方式,这是一种伪泛型.这种实现方式虽然可用但有其缺陷. <Thinking in Java>的作者 Bruce Eckel也曾撰文<这不是泛型>批评过JDK1.5中的泛型实现. 看了部分Java编程思想中泛型一章的内容,现在很晕,越看越觉得晕,这篇文章先欠着吧,等我再看一遍深入理解Java虚拟机JVM高级特性与最佳实践之后,或许能理解泛型的实现细节,那个时候再完成这篇文章. 感兴趣的朋友可以看看下
一.栗子 public class GenericityInher { //error: Type mismatch: cannot convert from ArrayList<Child> to ArrayList<Parent> public ArrayList<Parent> list(){ return new ArrayList<Child>(); } //right public Parent inher(){ return new Child
一.栗子 public class GenericityInher { //error: Type mismatch: cannot convert from ArrayList<Child> to ArrayList<Parent> public ArrayList<Parent> list(){ return new ArrayList<Child>(); } //right public Parent inher(){ return new Child
class Fruit{} class Apple extends Fruit{} class SubApple extends Apple{} class Orange extends Fruit{} class Holder<T>{ private T value; public Holder(){} public Holder(T value){this.value = value;} public T getValue() { return value; } public void s
一丶从字节码层面看范型擦除 public class Type1<T> { private T t; } 使用jclasslib插件查看其字节码: 可以看到 t属性的类型是List<Obeject>可以知道Java泛型确实通过类型擦除来实现,所以字节码中没有类型信息. 二丶泛型信息存储于常量池 public class Type2 { List mylist; //mylist 字段的GenericType是Class 而不是ParameterizeType } 使用idea查看字
最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object.上网搜了下这个语法糖,在stackoverflow上找到一个比较简单易懂的解释,搬运过来(https://stackoverflow.com/questions/5207115/java-generics-t-vs-object) 问题:下面2个方法的声明有何不同 public Object doSomething(Object obj) {....} public <T> T d