我是Java的新手(实际花了三天),但我必须编写一个自定义的跨平台编辑器应用程序作为我的数据库的接口.实际上一切都运行顺利,但我有一个奇怪的包错误.inb4 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;
}
Run Code Online (Sandbox Code Playgroud)
BarsList,EditorGUIInterface和EditorXMLObject都在myxmleditor包中.addEditorPane方法是
EditorGUIInterface.addEditorPane(EditorXMLObject element)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您的BARList类不是模板.如果你想使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可能最简单.这取决于您调用添加的频率和位置.