Java基础-泛型-0.0.1 通配符<?>以及PECS

通配符<?>

个人理解,<?>可用于需要泛型,但又不访问泛型对象的场景:

业务中遇到这种场景:如声明一个方法,用于处理对不同泛型类某些属性的修改,而目标属性不涉及泛型类操作,只是为了传入该泛型对象,此时入参我选择使用泛型<?>:
声明

public void execute(SomeAbstractClass<?>)

其中并没有对?所代表的对象进行任何操作,而是用到了SomeAbstractClass的公共方法

使用

SomeAbstractClass<Generic1> class1 = new SomeAbstractClass<>(generic1Obj)  
SomeAbstractClass<Generic2> class2 = new SomeAbstractClass<>(generic1Ob2)  
execute(class1)  
execute(class2)  

上界限定通配符<? extends T>

对应生产者

Generic<? extends T> producer

常用于

T obj = producer.get()

下界限定通配符<? super T>

对应消费者

Generic<? super T> consumer

常用于

T newObj = new T()
consumer.addObj(newObj)
posted @ 2022-09-03 16:27  Julymay  阅读(60)  评论(0)    收藏  举报