0

我有一个名为“Table”的类,它扩展了 ArrayList。在这个类中,我有一个名为 toArray() 的方法。每当我编译时,我都会收到错误消息:“表中的 toArray() 无法在 java.util.List 中实现 toArray() 返回类型 void 与 java.lang.Object [] 不兼容”

这是表类:

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]);
    }
}

}

任何建议将不胜感激!

4

4 回答 4

11

一般建议:不要从不用于客户端子类化的类扩展。ArrayList就是这样一个类的一个例子。而是定义您自己的实现List接口并包含一个ArrayList以重用其功能的类。这就是装饰器模式。

具体建议:toArray是一个定义在中的方法ArrayList,你不能用不同的返回类型覆盖它。

于 2013-02-22T13:28:28.533 回答
2

这是因为Collection实现ArrayList的 已经声明了一个toArray()方法。该方法返回Object[],这与您的方法的返回类型不同void,因此它不能用作覆盖。

您的方法似乎在做一些完全不同的事情,所以最好的解决方案是重命名它。

于 2013-02-22T13:28:44.763 回答
1

您正在重载一个名为 toArray 的方法。

尝试将其称为其他名称,例如 convertToMyArray()

于 2013-02-22T13:30:59.960 回答
0

我不知道你想完成什么,但你的方法应该是这样的。

@Override
public Object[] toArray(){
      return applicants.toArray();
   }
}
于 2013-02-22T13:33:21.667 回答