gpt4 book ai didi

Java: "? extends I"无法转换为 "? extends I"

转载 作者:行者123 更新时间:2023-11-29 10:14:24 34 4
gpt4 key购买 nike

这段代码:

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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com