我一直在努力扩展ArrayList类,但没有取得多大成功。我想扩展它,并能够参数化它。
所以通常你会有像
这样的东西ArrayList<SomeObject> list = new ArrayList<SomeObject>();
我想要
MyList<SomeObject> list = new MyList<SomeObject>();
简单地扩展ArrayList不起作用。
public class MyList extends ArrayList ...
当我尝试使用它时,我收到错误
MyList类型不是通用的;它 不能用参数参数化 &LT; SomeObject&GT;
我尝试了各种
public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>
没有成功,如果我使用类名后面的子对象它似乎工作,但由于某种原因隐藏了子对象类中的方法。
对于如何使这项工作正确的任何想法或建议都表示赞赏。
答案 0 :(得分:12)
您需要为ArrayList
的类型参数指定类型。对于泛型类型参数,T
相当常见。由于编译器不知道T
是什么,因此您需要向MyList
添加一个可以传入类型的类型参数。因此,您得到:
public class MyList<T> extends ArrayList<T>
此外,您可能需要考虑实施List
并委派给ArrayList
,而不是继承ArrayList
。 “赞成对象组合而不是类继承。[设计模式第20页]”
答案 1 :(得分:3)
public class MyList<T>
extends ArrayList<T>
{
}
MyList<SomeObject> list = new MyList<SomeObject>();
或
public class MyList
extends ArrayList<SomeObject>
{
}
MyList list = new MyList();
答案 2 :(得分:1)
您不应该扩展ArrayList,而是扩展AbstractList:
public class MyList<T> extends AbstractList<T> {
public int size() {...}
public T get(int index) {...}
}