我有一个名为“Table”的类,它扩展了ArrayList。在这个类中,我有一个名为toArray()的方法。每当我编译我得到错误:“表中的toArray()无法在java.util.List中实现toArray()返回类型void与java.lang.Object []”
不兼容这是Table类:
public class Table extends ArrayList<Row>
{
public ArrayList<String> applicants;
public String appArray[];
public String appArray2[] = {"hello", "world","hello","world","test"};
/**
* Constructor for objects of class Table
*/
public Table()
{
applicants = new ArrayList<String>();
}
public void addApplicant(String app)
{
applicants.add(app);
toArray();
}
public void toArray()
{
int x = applicants.size();
if (x == 0){ } else{
appArray=applicants.toArray(new String[x]);}
}
public void list() //Lists the arrayList
{
for (int i = 0; i<applicants.size(); i++)
{
System.out.println(applicants.get(i));
}
}
public void listArray() //Lists the Array[]
{
for(int i = 0; i<appArray.length; i++)
{
System.out.println(appArray[i]);
}
}
}
任何建议都会非常感激!
答案 0 :(得分:11)
一般建议:不要从非客户端子类化的类扩展。 ArrayList
就是这样一个类的一个例子。而是定义您自己的类,该类实现List
接口并包含ArrayList
以重用其功能。这是装饰器模式。
具体建议:toArray
是ArrayList
中定义的方法,您不能使用不同的返回类型覆盖它。
答案 1 :(得分:2)
这是因为ArrayList
实现的Collection
已经声明了toArray()
方法。该方法返回Object[]
,这与您的方法的返回类型void
不同,因此它不能作为覆盖。
您的方法似乎做了一些完全不同的事情,因此最好的解决方案就是重命名它。
答案 2 :(得分:1)
您正在重载一个名为toArray的方法。
尝试将其称为其他内容,例如convertToMyArray()
答案 3 :(得分:0)
我不知道你想要完成什么,但你的方法看起来应该是这样的。
@Override
public Object[] toArray(){
return applicants.toArray();
}
}