【发布时间】:2013-04-15 15:30:16
【问题描述】:
我有:
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);
但它给了我一个铸造错误,您不能将 Wrench 更改为 Part。为什么Java不让我这样做?扳手有 Parts 的所有方法,为什么我不能将它转换成它实现并使用它的东西?
错误:
The method loadSpinner(Spinner, List<Part>) in the type NewActivity is not applicable for the arguments (Spinner, List<Wrench>)
【问题讨论】:
-
我认为 WrenchDao 应该返回 List
-
你能粘贴实际的错误吗?我认为这是在抱怨您不能将
List<Wrench>转换为List<Part>,而不是您不能将Wrench转换为Part...? -
如果 Part 不是接口,而是将其设为父类,然后让 Wrench 和 Hammer 扩展 Part,该怎么办。您甚至可以将 getName() 和 getId() 抽象化,以便 Wrench 和 Hammer 必须实现这些方法。
-
我希望我可以改变它,但我使用的是预构建的 jar 数据管理器插件。 @EdwardThomson 用错误更新我的问题。
标签: java generics inheritance interface casting