1. ホーム
  2. java

汎用リストを配列に変換する

2023-11-06 12:38:47

質問

検索してみたのですが、残念ながら正しい答えが得られません。

class Helper {
    public static <T> T[] toArray(List<T> list) {
        T[] array = (T[]) new Object[list.size()];
        for (int i = 0; i < list.size(); i++) {
            array[i] = list.get(i);
        }
        return array;
    }
}

テストしてください。

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("abc");
    String[] array = toArray(list);
    System.out.println(array);
}

しかし、エラーが投げられます。

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at test.Helper.main(Helper.java:30)

これを解決するには?


アップデイト

私のコードの型が長すぎることがあるので、このメソッドが欲しいのです。

newEntries.toArray(new IClasspathEntry[0])

電話を希望する。

toArray(newEntries)


最後に

このような方法を作るのは不可能に思えますが、皆さん本当にありがとうございました。

どのように解決するのですか?

あなたは、単に list.toArray(T[] array) を呼び出せば自分で実装する心配はありませんが、aioobeが言ったように、型消去のために汎用型の配列を作成することはできません。その型を戻す必要がある場合は、自分で型付きインスタンスを作って渡す必要があります。