微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java的ArrayList的继承问题看起来像一个命名空间冲突

如何解决Java的ArrayList的继承问题看起来像一个命名空间冲突

我是Java的新手(实际上花了三天的时间),但是我必须编写一个自定义的跨平台编辑器应用程序作为数据库接口。一切实际上是运行平稳,但I \'已经有了一个奇怪的包错误。 inb4 3年的Python和AS3编程经验。 我正在尝试扩展java.util.ArrayList,并陷入添加方法覆盖中。代码看起来像这样:
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;
}
BarsList,EditorGUIInterface和EditorXMLObject在myxmleditor包中。 addEditorPane方法
EditorGUIInterface.addEditorPane(EditorXMLObject element)
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类不是模板。如果要使BarsList成为EditorXMLObject的列表,请简单编写:
public class BarsList extends java.util.ArrayList<EditorXMLObject>
但是,如果您要基于ArrayList创建另一个模板,请编写:
public class BarsList<T> extends java.util.ArrayList<T>
    ,        最好不要继承ArrayList。尝试将ArrayList保留为BarsList的成员,然后自己调用add。 使用继承可能使以后更改列表实现变得更加困难(调用代码可以使用ArrayList特定的行为)。另外,您依赖于ArrayList的实现细节(如hertzsprung所指出的),并负责维护ArrayList订立的所有合同。用户调用remove,addAll或clear会发生什么? 另外,该类中的内容很少,仅直接使用List并手动调用addEditorPane可能是最简单的。这取决于您从何处调用add的频率和位置。     ,        对集合进行子类化是危险的,因为例如,您不知道超类内部的addAll()是否委托addAll()(有效Java的第71页中对此进行了进一步说明)。 如果可以避免的话,最好创建一个转发集合。 Google Guava的ForwardingList在这里可能很有用。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。