
使用类似<? extends Number>通配符作为方法参数时表示:
-
方法内部可以调用获取
Number引用的方法,例如:Number n = obj.getFirst();; -
方法内部无法调用传入
Number引用的方法(null除外),例如:obj.setFirst(Number n);。
即一句话总结:使用extends通配符表示可以读,不能写。
使用类似<T extends Number>定义泛型类时表示:
- 泛型类型限定为
Number以及Number的子类。
使用类似<? super Integer>通配符作为方法参数时表示:
-
方法内部可以调用传入
Integer引用的方法,例如:obj.setFirst(Integer n);; -
方法内部无法调用获取
Integer引用的方法(Object除外),例如:Integer n = obj.getFirst();。
即使用super通配符表示只能写不能读。
使用extends和super通配符要遵循PECS原则。(不明白,看文章也比较吃力)
无限定通配符<?>很少使用,可以用<T>替换,同时它是所有<T>类型的超类。
部分反射API是泛型,例如:Class<T>,Constructor<T>;
可以声明带泛型的数组,但不能直接创建带泛型的数组,必须强制转型;
可以通过Array.newInstance(Class<T>, int)创建T[]数组,需要强制转型;
同时使用泛型和可变参数时需要特别小心。
本文详细解析了Java中extends和super通配符在泛型方法和类中的应用,阐述了它们的读写限制。extends通配符用于读取操作,保证类型是Number或其子类;super通配符则用于写入操作,确保类型是Number的父类,包括Number本身。PECS原则(Producer Extends, Consumer Super)是使用这两个通配符的重要指导原则。此外,还提及了无限定通配符<?>和泛型数组的相关注意事项。
https://www.liaoxuefeng.com/wiki/1252599548343744/1265105899616928
7790

被折叠的 条评论
为什么被折叠?



