Java ArrayList继承问题(看起来像命名空间冲突)

Java ArrayList继承问题(看起来像命名空间冲突),java,Java,我是Java新手(实际上花了三天时间),但我必须编写一个定制的跨平台编辑器应用程序作为数据库的接口。实际上一切都很顺利,但我有一个奇怪的软件包错误。3年Python和AS3编程经验 我试图扩展一个java.util.ArrayList,却被困在了add方法重写中。代码看起来是这样的: package myxmleditor; public class BarsList<EditorXMLObject> extends java.util.ArrayList<Edit

我是Java新手(实际上花了三天时间),但我必须编写一个定制的跨平台编辑器应用程序作为数据库的接口。实际上一切都很顺利,但我有一个奇怪的软件包错误。3年Python和AS3编程经验

我试图扩展一个java.util.ArrayList,却被困在了add方法重写中。代码看起来是这样的:

package myxmleditor;

public class BarsList<EditorXMLObject> extends 
    java.util.ArrayList<EditorXMLObject> {

@Override
public boolean add(EditorXMLObject element) {
    editorGUI.addEditorPane(element); // error here
    return super.add(element);
}

    public EditorGUIInterface editorGUI = null;
}
NetBeans向我显示了一个错误:

method addEditorPane in class myxmleditor.TsukasaXMLEditGUI cannot be applied to given types;
  required: **myxmleditor.EditorXMLObject**  
  found: **EditorXMLObject**  
  reason: actual argument EditorXMLObject cannot be converted to myxmleditor.EditorXMLObject by method invocation conversion

您的类条形图列表不是模板。如果要使BarsList成为EditorXMLObject的列表,请简单编写:

公共类BarsList扩展了java.util.ArrayList

但是,如果要基于ArrayList创建另一个模板,请编写:


公共类BarsList扩展了java.util.ArrayList

最好不要将ArrayList子类化。尝试将ArrayList保留为BarsList的成员,然后自己调用add

使用继承可能会使以后更改列表实现更加困难(调用代码可能会使用特定于ArrayList的行为)。此外,您还依赖于ArrayList的实现细节(正如hertzsprung所指出的),并负责维护ArrayList签订的任何合同。当用户调用remove、addAll或clear时会发生什么


或者,类中的内容太少,直接使用列表并手动调用addEditorPane可能是最简单的。这取决于调用add的频率和位置

子类化集合是危险的,因为,例如,您不知道是否将addAll()委托添加到超类中的add()


如果可以避免,最好创建一个转发集合;谷歌番石榴在这里很有用。

你能提供一些关于
EditorGUIInterface
类的详细信息吗?尤其是
addEditorPane
方法。所有类都在同一个包中吗?由luckyjaca解决,我必须声明公共类BarsList扩展java.util.ArrayList{你是说有一个不扩展ArrayList的一般建议吗?如果他确实在创建一个新的
列表
实现,我认为扩展ArrayList没有问题,但也许我遗漏了一些东西。当你只需要稍微调整一个方法时,为什么不使用类继承呢?好的问题,我已经添加了一些解释,部分摘自hertzsprung的答案。+1你是对的,我错了,答案很好……现在我明白了为什么它不起作用。我写的东西实际上有一个错误。应该有
公共类BarList扩展java.util.ArrayList
而没有第一个
,即使addAll()委托add()这正是我所需要的。当前的代码已经可以使用ArrayList本身了,但是我必须在事件调度线程中进行类转换和类型检查,它看起来很奇怪。摆脱类转换的最简单的解决方案是扩展ArrayList.Nanako-如果它不调用add()?然后,如果有人调用addAll,它将中断。另外,如果有人删除元素,会发生什么情况?
method addEditorPane in class myxmleditor.TsukasaXMLEditGUI cannot be applied to given types;
  required: **myxmleditor.EditorXMLObject**  
  found: **EditorXMLObject**  
  reason: actual argument EditorXMLObject cannot be converted to myxmleditor.EditorXMLObject by method invocation conversion