我在掌握某些内容时遇到了一些问题-我可能正在处理完全错误的问题。
我正在尝试创建一个扩展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
<Item>
CustomArrayList
使用该<Item>参数,您的代码等于
public class CustomArrayList<T> extends ArrayList<T> { // ... for (T i : this) { i.getId(); } // ... }
显然,它T可能永远无法正常工作,因为它可能指向任何类型。