扩展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可能永远无法正常工作,因为它可能指向任何类型。