扩展ArrayList并创建新方法
问题内容:
我在掌握某些内容时遇到了一些问题-我可能正在处理完全错误的问题。
我正在尝试创建一个扩展ArrayList的类,但是具有一些增加功能的方法(至少对于我正在开发的程序而言)。
方法之一是findById(intid),它在每个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);
}
}
问题答案:
更改
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可能永远无法正常工作,因为它可能指向任何类型。