我一直在试图扩展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) {...}
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top