java协变和逆变

java中的协变和逆变理论,在网络上有很多,但是理解起来需要花费点时间。

 

协变和逆变一般都是作为方法的参数存在的,常常看到PECS理论,exends作为用来限制生产者,super用来限制消费者。

 

使用extends产生协变,传入方法的参数,必须是T的类型或者子类型的集合,此时集合不能add,只能get。如果能够add,那么在调用方法内,如果我add了一个T的子类对象,这个对象类型又跟传入的list中的对象类型 不一样,那么就会导致在调用方法外,出现类型错误。这样就产生了限制生产者的作用。

使用super产生逆变,传入方法的参数,必须是T的类型或者父类型的集合,此时集合能够add,但是get只能得到Object,在方法内,相当于生产者,只生产T类型或者子类的对象,供调用者使用。外部调用者相当于消费者,只能消费到T类型或其子类的对象。

你可能感兴趣的:(java)