2013-02-22 55 views
0

我有一個名爲「表」擴展ArrayList的類。在這個類中,我有一個名爲toArray()的方法。每當我編譯我得到的錯誤:「表中的toArray()不能實現java.util.List中的toArray()返回類型void與java.lang.Object不兼容[toArray方法不工作擴展ArrayList <>

這裏是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

首先,開始改變to'if appArray = applicants.toArray(新的String [X]);' – 2013-02-22 13:28:40

回答

11

一般建議:不要擴展不適用於客戶端子類的類。 ArrayList就是這樣一類的例子。相反,請定義您自己的類,該類實現List接口幷包含一個ArrayList以重用其功能。這是修飾器模式。

具體建議:toArray是在ArrayList中定義的方法,您不能用不同的返回類型覆蓋它。

+6

或更好(X!= 0):延伸'AbstractList'(http://docs.oracle .com/javase/7/docs/api/java/util/AbstractList.html) – Cephalopod 2013-02-22 13:31:12

+2

甚至更​​好:[''ForwardingList'](http://docs.guava-libraries.googlecode.com/git/javadoc/com/ google/common/collect/ForwardingList.html) – gustafc 2013-02-22 13:33:12

+0

@Arian +1,優點。 – 2013-02-22 13:34:37

2

這是因爲Collection,其中ArrayList實現,已經聲明瞭toArray()方法。該方法返回Object[],這與您的方法的返回類型void不同,因此它不能用作覆蓋。

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

1

您正在重載一個名爲toArray的方法。

嘗試調用別的東西,像convertToMyArray()

0

我不知道你想完成什麼,但你的方法應該是這個樣子。

@Override 
public Object[] toArray(){ 
     return applicants.toArray(); 
    } 
} 
相關問題