0

ArrayListを拡張する「Table」というクラスがあります。このクラス内には、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 に答える