-
21-08-2019 - |
题
我一直在试图扩展ArrayList类没有成功。我想扩展它,并能够将其参数化。
所以正常情况下你有像
ArrayList<SomeObject> list = new ArrayList<SomeObject>();
我想
MyList<SomeObject> list = new MyList<SomeObject>();
简单地延伸的ArrayList不起作用。
public class MyList extends ArrayList ...
在当我尝试使用它,我得到的错误
在型MYLIST是不通用的;它 不能带参数的参数化
我已经尝试的变型
public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>
没有成功,如果我使用的子对象似乎工作,但隐藏在子对象类的方法由于某种原因,类名后面。
这是如何得到这个工作权利的任何想法或建议表示赞赏。
解决方案
您需要指定ArrayList
的类型参数的类型。对于泛型类型参数,T
是相当普遍的。由于编译器不知道T
是什么,你需要添加一个类型参数MyList
,可以有类型传入因此,您可以:
public class MyList<T> extends ArrayList<T>
此外,你可能要考虑实施List
和委派到ArrayList
,而不是从ArrayList
继承。 “有利于对象的组合物在类继承。[设计模式 20微克。]”
其他提示
public class MyList<T>
extends ArrayList<T>
{
}
MyList<SomeObject> list = new MyList<SomeObject>();
或
public class MyList
extends ArrayList<SomeObject>
{
}
MyList list = new MyList();
您不应该延伸ArrayList中,延伸 AbstractList的代替:
public class MyList<T> extends AbstractList<T> {
public int size() {...}
public T get(int index) {...}
}
不隶属于 StackOverflow