简体   繁体   English

Java的一个列表 <object> 到它的界面

[英]Java casting a list of <object> to its interface

I have: 我有:

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();
}

I am using a prebuilt database manager written for Android SQLite that returns a list of Objects based on what I am retrieving: 我正在使用为Android SQLite编写的预构建数据库管理器,它根据我检索的内容返回一个对象列表:

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

I cannot change how this function operates. 我无法改变这个功能的运作方式。

Now I am getting both lists like: 现在我得到两个列表:

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

However, I want to populate spinners with this data (Spinners are the drop down lists in android). 但是,我想用这些数据填充微调器(Spinners是android中的下拉列表)。

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

loadSpinner(wrenchSpinner, wrenches);

But it gives me a casting error that you cannot change Wrench to Part. 但它给了我一个铸造错误,你无法改变扳手到零件。 Why doesn't Java let me do this? 为什么Java不允许我这样做? Wrenches have all methods that Parts do so why cant I cast it into something it implements and use it? 扳手有各种方法,部件这样做,为什么我不能把它投入它实现和使用它的东西?

Error: 错误:

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

You have to replace the second parameter of loadSpinner to: 您必须将loadSpinner的第二个参数loadSpinner为:

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

See also: When do Java generics require <? 另请参阅: Java泛型何时需要<? extends T> instead of <T> and is there any downside of switching? 扩展T>而不是<T>并且是否存在切换的缺点?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM