我在抓东西方面遇到了一些问题 - 我可能会对此完全错误。
我正在尝试创建一个扩展ArrayList的类,但有几个方法可以增加功能(至少对于我正在开发的程序。)
其中一个方法是findById(int id),它在每个ArrayList对象中搜索特定的id匹配。到目前为止它正在运作,但它不会让我做for (Item i : this) { i.getId(); }
我不明白为什么?
完整代码:
public class CustomArrayList<Item> extends ArrayList<Item> {
// declare singleton instance
protected static CustomArrayList instance;
// private constructor
private CustomArrayList(){
// do nothing
}
// get instance of class - singleton
public static CustomArrayList getInstance(){
if (instance == null){
instance = new CustomArrayList();
}
return instance;
}
public Item findById(int id){
Item item = null;
for (Item i : this) {
if (i.getId() == id) {
// something
}
}
return item;
}
public void printList(){
String print = "";
for (Item i : this) {
print += i.toString() + "\n";
}
System.out.println(print);
}
}
答案 0 :(得分:7)
更改
public class CustomArrayList<Item> extends ArrayList<Item> {
到
public class CustomArrayList extends ArrayList<Item> {
我怀疑Item
是您要在列表中存储的类的名称。在<Item>
之后添加CustomArrayList
,您将引入一个影响此类的类型参数。
使用 <Item>
参数,您的代码等于
public class CustomArrayList<T> extends ArrayList<T> {
// ...
for (T i : this) { i.getId(); }
// ...
}
显然不会一直有效,因为T
可能会引用任何类型。
答案 1 :(得分:2)
什么是getId()
?据推测它是某些类中的一种方法,但我们不知道哪个类。
如果您实际上有一个名为Item
的类,其中getId()
方法是一个列表,您只需要阻止您的类通用。所以不要这样:
public class CustomArrayList<Item> extends ArrayList<Item> {
你想要:
public class CustomArrayList extends ArrayList<Item> {
目前在您的班级中,Item
未引用名为Item的类,它引用名为Item
的类型参数。
现在亲自:
ArrayList<>
,除非我真的不得不,更喜欢构图而不是继承