Java “获取-输出”原则的解释

Java “获取-输出”原则的解释,java,generics,Java,Generics,我读过O'Reilly的书,在这本书中,我了解了这个放球原则 当仅从结构中获取值时,请使用扩展通配符 当您仅将值放入结构中时,请使用超级通配符 当你们都想从一个结构中获取和放入数据时,不要使用通配符 例外情况包括: 除了属于每种引用类型的值

我读过O'Reilly的书,在这本书中,我了解了这个放球原则

  • 当仅从结构中获取值时,请使用
    扩展
    通配符
  • 当您仅将值放入结构中时,请使用
    超级
    通配符
  • 当你们都想从一个结构中获取和放入数据时,不要使用通配符
例外情况包括:

  • 除了属于每种引用类型的值
    ,您不能将任何内容放入使用
    扩展的
    通配符声明的类型中

  • 除了类型为
    的值之外,不能从使用
    超级通配符声明的类型中获取任何内容,该值是每个引用类型的超级类型


有人能帮我深入探讨这条规则吗?如果可能的话,请把它们按等级排列。

考虑一堆香蕉。这是一个
collection,但是当从CollectionJava获取一个水果时,java将阻止您向
Collection@JonSkeet这可能是一个愚蠢的问题,但在什么情况下不同时“访问”add()和get()方法有用?我的意思是,要从列表中获取某个对象,必须先添加它,对吗?维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维卡·维。例如,为了显示人名列表,我可能只需要一个
Collection@Timmos:在这种情况下,你必须准确地说出“it”的意思。。。但是是的,Java泛型的规则是为了提供类型安全而设计的。+1:总是很高兴看到有人在一个问题上寻求澄清fundament@Everyone我想你指的是基础意义上的基础,而不是背面?