java - 泛型中的通配符类型

标签 java generics

<分区>

Possible Duplicate:
Adding an element inside a wildcard type ArrayList

我不明白为什么编译器认为这段代码是错误的:

Pair<Manager> managerBuddies = new Pair<Manager>(ceo, cfo);
Pair<? extends Employee> wildcardBuddies = managerBuddies; // OK
wildcardBuddies.setFirst(lowlyEmployee); // compile-time error

Pair<? extends Employee> 的方法有:

? extends Employee getFirst()
void setFirst(? extends Employee)

不清楚为什么我们不能设置值,因为Employee? extends Employee 的子类型. Java 教程试图解释它,但我仍然有疑问。 有人可以澄清一下吗?

最佳答案

对于编译器来说,这个? extends Employee 表示 Employee 的一个特定子类型,编译器无法检测是哪个子类型。所以它不能让你插入任何员工。

更多信息请引用这个问题: What is PECS (Producer Extends Consumer Super)?
或阅读 Generics FAQ安吉丽卡·兰格 (Angelika Langer) 着。

关于java - 泛型中的通配符类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107584/

相关文章:

java - 如何更改 Rails redis 缓存格式?

java - Selenium WebDriver Java 使用动态 ID 定位元素

generics - 具有泛型返回类型的函数

java - 使用泛型的 toString() 方法

java - 内联扩展通用抽象 Template 类

java - 排除 java、Eclipse 中的 java 类

java - cdi 生产者是否具有类范围

java - neo4j - 属性自动索引器不存储值

java - 静态值中的泛型和通配符。它说这是同一个类,但不能编译

Java比较泛型类型