请不要在新代码中使用原生态类型

声明中具有一个或者多个类型参数(type parameter)的类或者接口,就是泛型( generic)类或者接口。

泛型类和泛型接口统称为泛型( generic type)。

每种泛型都可以定义一组参数化的类型(parameterized type)
构成格式:类(接口)名<参数类型>。

每种泛型都定义一个原生态类型(raw type),即不带任何实际类型参数的泛型名称。

如果使用原生态类型,就失掉了泛型在安全性和表述性方面的所有优势。

出错之后应该尽快发现,最好是在编译时就发现。

1、使用泛型后,就可以很快的发现错误。

2、使用泛型后,删除元素就不需要进行手工转换了。如下代码:

public void test(){
        MyList<MyItem> myItemMyList=new MyList<MyItem>();
        myItemMyList.add(new MyItem1("123"));//error
    }
public class MyList<E> {
 
   private E e;
 
    public MyList () {
    }
 
    public void add(E e){
        this.e=e;
    }
 
    public E getMyList(){
        return e;
    }
 
}
 
public class MyItem1 {
    private String name;
 
    public MyItem1(String name) {
        this.name=name;
    }
}
 
public class MyItem {
    private String name;
 
    public MyItem (String name) {
       this.name=name;
    }
}

如果不提供参数类型,使用集合类型和其他泛型也仍然是合法的,但不应该这么做。如果使用原生态类型,就失掉了泛型在安全性和表述性方面的所有优势。

原生态类型List和参数化类型List<Object>之间有什么区别?

前者逃避了泛型检查,后者则明确告知编译器,它能够持有任意类型的对象。

你可以将List<String>传递给类型List的参数 却不能传递给类型List<Object>的参数。因为,泛型有子类型化的规则,List<String>是原生态类型List的一个子类型,而不是参数化类型List<Object>的子类型(见第25条)。

如果使用像List这样的原生类型,就会失掉类型安全性,但是如果使用像List<Object>这样的参数化类型,则不会。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容