如何参数化扩展集合

She*_*oss 4 java collections extends parameterized

我一直试图扩展ArrayList类没有太大的成功.我想扩展它,并能够参数化它.

通常你有类似的东西

ArrayList<SomeObject> list = new ArrayList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

我想要

MyList<SomeObject> list = new MyList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

简单地扩展ArrayList不起作用.

public class MyList extends ArrayList ...
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试过变种

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>
Run Code Online (Sandbox Code Playgroud)

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

任何有关如何使这项工作正常的想法或建议都值得赞赏.

Ada*_*icz 12

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

public class MyList<T> extends ArrayList<T>
Run Code Online (Sandbox Code Playgroud)

此外,您可能需要考虑实现List和委派给ArrayList,而不是继承自ArrayList."赞成对象组合而不是类继承.[ Design Patterns pg.20]"