4

我一直在尝试扩展 ArrayList 类,但没有取得多大成功。我想扩展它,并能够对其进行参数化。

所以通常你有类似的东西

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

我想

MyList<SomeObject> list = new MyList<SomeObject>();

简单地扩展 ArrayList 是行不通的。

public class MyList extends ArrayList ...

当我尝试使用它时,我得到了错误

MyList 类型不是通用的;它不能用参数 <SomeObject> 参数化

我已经尝试过

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

没有成功,如果我使用类名后面的子对象,它似乎可以工作,但由于某种原因隐藏了子对象类中的方法。

任何关于如何正确工作的想法或建议都值得赞赏。

4

3 回答 3

12

您需要为ArrayList的类型参数指定一个类型。对于泛型类型参数,T是相当常见的。由于编译器不知道 aT是什么,因此您需要添加一个类型参数,MyList以便可以传入类型。因此,您会得到:

public class MyList<T> extends ArrayList<T>

此外,您可能需要考虑实现List并委托给ArrayList,而不是继承自ArrayList. “优先于类继承的对象组合。[设计模式第 20 页]”

于 2009-03-23T22:15:01.787 回答
3
public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

或者

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();
于 2009-03-23T22:15:23.347 回答
1

您不应该扩展 ArrayList,而是扩展AbstractList

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
于 2009-03-23T22:23:53.420 回答