java泛型分享

泛型,一个孤独的守门者

关于泛型的具体细节这篇博客我觉得讲得十分详细,所以我分享一下我学习中的一些难点与体会。

1.学习泛型要先掌握java的类型转换机制java引用数据类型转换,由于继承,java自然的向上转换,父类转换为子类需要特定条件。
2.作用:泛型,就是参数类型化,把一个类型作为参数传递进去,而把他成为守门人,很好的形容了泛型的功能。在没有泛型之前,一般都是用继承,object这个基类来实现但是这样不管加入任何类型都可以,所以需要泛型这个守门人,检测传入的类型,可以在编译阶段查出错误。

List arrayList = new ArrayList();
arrayList.add("aaaa");
arrayList.add(100);

for(int i = 0; i< arrayList.size();i++){
    String item = (String)arrayList.get(i);
    Log.d("泛型测试","item = " + item);
}

崩溃
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

List arrayList = new ArrayList();
...
//arrayList.add(100); 在编译阶段,编译器就会报错

3.类型擦出,理解反省的这个特性才能完全掌握泛型。
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,。泛型全部转换为object,与普通类没什么区别(如有类型限定则转换为限定类型)所以说,泛型是一个守门人,在编译的时候提醒你传入什么类型,相应的,我们也可以利用反射,我们绕过编译器去调用 add 方法

4.通配符?
Java 泛型通配符和类型限定
关于上限与下限的读取使用说明

我认为很好的例子


public static void count(Collection ints, int n)
{
       for (int i = 0; i < n; i++) ints.add(i);
}
public static void main(String[] args) {
    Listints = new ArrayList<>();
    count(ints, 5);
    assert ints.toString().equals("[0, 1, 2, 3, 4]");
    Listnums = new ArrayList<>();
    count(nums, 5); nums.add(5.0);
    assert nums.toString().equals("[0, 1, 2, 3, 4, 5.0]");
    Listobjs = new ArrayList<>();
    count(objs, 5); objs.add("five");
    assert objs.toString().equals("[0, 1, 2, 3, 4, five]");
}
 

                            
                        
                    
                    
                    

你可能感兴趣的:(java泛型分享)