作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码:
interface I {}
public class Test {
TableView<? extends I> table;
Test(ObservableList<? extends I> list) {
table = new TableView<>();
table.setItems(list);
}
}
...产生此消息:
error: method setItems in class TableView<S> cannot be applied to given types;
table.setItems(list);
required: ObservableList<CAP#1>
found: ObservableList<CAP#2>
reason: argument mismatch; ObservableList<CAP#2> cannot be converted to ObservableList<CAP#1>
where S is a type-variable:
S extends Object declared in class TableView
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends I from capture of ? extends I
CAP#2 extends I from capture of ? extends I
两个相同类型之间怎么会存在类型不匹配?我错过了什么?
最佳答案
在 Java Generics 中,?
通配符不能相同,因为它们表示未知类型。未知类型不能等于其他未知类型。
如果希望类型匹配,则必须在 Test
类上定义泛型类型参数,并在整个类中引用它。
public class Test<T extends I> {
TableView<T> table;
Test(ObservableList<T> list) {
table = new TableView<>();
table.setItems(list);
}
}
关于Java: "? extends I"无法转换为 "? extends I",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024056/
我是一名优秀的程序员,十分优秀!