Java泛型: 主要知识点总结

科技资讯 投稿 6300 0 评论

Java泛型: 主要知识点总结

Java泛型:主要知识点总结

1 泛型的好处

    解决元素存储的安全性问题。
  • 解决获取数据元素时,需要类型强制转换的问题。
  • Java泛型可以保证如果程序在编译时没有发出警告,运行。时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。

2 自定义泛型结构

2.1 泛型类和泛型接口

interface List<T> 和 class GenTest<K,V>,其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。常用T表示,是Type的缩写。

2.2 泛型方法

2.3 泛型的实例化

List<String> strList = new ArrayList<String>(,Iterator<Customer> iterator = customers.iterator(

    T只能是类,不能用基本数据类型填充。但可以使用包装类填充。

2.4 泛型通配符

2.4.1 通配符:

    使用类型通配符的实例:List<?>Map<?,?>List<?>List<String>List<Object>等各种泛型List的父类。
  • 读取List<?>的对象list中的元素时,永远是安全的,因为不管list的真实类型是什么,它包含的都是Object
    • 我们可以调用get(方法并使用其返回值。返回值是一个未知的类型,但是我们知道,它总是一个Object。
  • 写入list中的元素时,不行。因为我们不知道其中的元素类型,我们不能向其中添加对象。唯一的例外是null,它是所有类型的成员。
      将任意元素加入到其中不是类型安全的:Collection<?> c = new ArrayList<String>(;执行c.add(new Object(会发生编译时错误。因为我们不知道c的元素类型,故传给add的任何参数都必须是一个未知类型的子类。因为不知道那是什么类型,所以无法传任何东西进去。
  • 使用示例:
  • 注意事项:
      注意点1:编译错误:不能用在泛型方法声明上,返回值类型前面<>不能使用?
  • 注意点2:编译错误:不能用在泛型类的声明上
  • 注意点3:编译错误:不能用在创建对象上,右边属于创建集合对象
  • 2.4.2 通配符上限和下限:

      上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=。
      • 使用示例:<? extends Number>, (无穷小 , Number],只允许泛型为NumberNumber子类的引用调用。<? extends Comparable>只允许泛型为实现Comparable接口的实现类的引用调用。
    • 下限super:使用时指定的类型不能小于操作的类,即>=。
        使用示例:<? super Number> [Number , 无穷大只允许泛型为NumberNumber父类的引用调用。

    3 泛型使用的注意点

      泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如:<E1,E2,E3>
    1. 泛型类的构造器如下:public GenericClass({}。而下面是错误的:public GenericClass<E>({}
    2. 实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。
    3. 泛型不同的引用不能相互赋值。例如:ArrayList<String>ArrayList<Integer>是两种类型,相互赋值会导致报错。
    4. 泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价于Object
    5. 如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。
    6. 泛型的指定中不能使用基本数据类型,可以使用包装类换。
    7. 在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法中不能使用类的泛型。
    8. 异常类不能是泛型的。(继承某个异常类的子类不能声明为泛型类
    9. 父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型。

    图片文件夹 images/images0

    编程笔记 » Java泛型: 主要知识点总结

    赞同 (36) or 分享 (0)
    游客 发表我的评论   换个身份
    取消评论

    表情
    (0)个小伙伴在吐槽