java泛型代码杂谈

《Thinking In Java》
——— 献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!
在学习《Thinking in java》书中总能获得一些收获,纸质版第四版中关于java泛型写了大概几百页,内容丰富至极,详细分析了泛型在内存堆栈还有和C++的对比,感谢原书作者Bruce Eckel带给我那么多惊喜。
接下来我我总结了一些关于书中泛型的经典代码。(本人win10操作系统,jdk1.8 64位版本)

Class class1 = new ArrayList<String>().getClass();
Class class2 = new ArrayList<Integer>().getClass();
System.out.println(class1==class2);

输出结果true

这里jvm采用了擦除机制,内部认为就是集合,擦除了集合的具体类型。
另外Class<\?>和Class<\Object>是有区别的,前者是一个泛化的类型,不确定是什么,可能是集合,可能是数组,也可能是复杂类型。后者是一个Object类型。(“\”为编辑时候转义,否则看不见内容)

public class TestJavaClass {

    public static void main(String[] args) {
        fun(new ArrayList<>());
        System.out.println(1);  
    }

    public static void fun(List list){ 
    }

    public static void fun(List list){   
    }
}

输出结果是1
按照重载的定义,fun方法构成重载是有冲突的,因为有边界类TestJavaClass,上面属于子类类型,下面属于父类类型。其实这样理解应该是不对的。泛型中泛化了,都属于集合类型的。不构成重载。虽然编译报错,但是仍旧可以运行得出结果,会选择上面的代码执行。哪个放上面都可以。

class A<T extends Object & Serializable & Set & List>{

}

这段代码的意思是T必须继承Object并且实现Serializable,Set , List接口。这样写好处很多。比如需要继承某个类,并且都需要可序列化。

class TupleD,F,M,P>{

}

public Tuple<String,List<String>,Object,Map<String,String>,Integer> test(){

    return null;
}

泛型可以容纳很多类型,也可以叫元组。一次返回很多类型的元组。

class N<T extends N<T>>{

}

上面这种写法看起来有些特殊,无限泛型。但是依旧可以这些写。

本人能力有限,只是把很少的代码贴出来和大家分享,如有疑问,不吝赐教。qq531020008

你可能感兴趣的:(javase)