gpt4 book ai didi

Java 将 列表转换到它的接口(interface)
转载 作者:搜寻专家 更新时间:2023-10-31 08:17:21 24 4
gpt4 key购买 nike

我有:

class Hammer Implements Part {
public String getName() { return name; }
public int getId() { return id; }
...
}

class Wrench implements Part {
public String getName() { return name; }
public int getId() { return id; }
...
}

interface Part {
String getName();
int getId();
}

我正在使用为 Android SQLite 编写的预建数据库管理器,它根据我正在检索的内容返回一个对象列表:

dataManager().getWrenchDao().getAll(); // returns List<Wrench>

我无法更改此功能的运作方式。

现在我得到两个列表,如:

List<Wrench> wrenches = dataManager().getWrenchDao().getAll();
List<Hammer> hammers = dataManager().getHammerDao().getAll();

但是,我想用这些数据填充微调器(微调器是 android 中的下拉列表)。

loadSpinner(Spinner s, List<Part> data) {
...
data.ElementAt(i).getName();
data.ElementAt(i).getId();
...
}

loadSpinner(wrenchSpinner, wrenches);

但是它给了我一个类型转换错误,你不能把 Spanner 改成零件。为什么 Java 不允许我这样做? Wrenches 具有 Parts 具有的所有方法,所以为什么我不能将它转换成它实现的东西并使用它?

错误:

The method loadSpinner(Spinner, List<Part>) in the type NewActivity is not applicable for the arguments (Spinner, List<Wrench>)

最佳答案

您必须将 loadSpinner 的第二个参数替换为:

loadSpinner(Spinner s, List<? extends Part> data)

另请参阅:When do Java generics require <? extends T> instead of <T> and is there any downside of switching?

关于Java 将 <object> 列表转换到它的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019094/

24 4 0