Java.lang.Object
という形式の有効なArrayList
オブジェクトがあります。 Object
をArrayList
に再度変換する必要があります。私はこれを試しました:
オブジェクトobj2 =あるソースから。 。 ; ArrayList al1 = new ArrayList(); al1 =(ArrayList)obj2; System.out.println( "List2 Value:" + al1);
しかし、それはnull
を出力しています。これどうやってするの?
これは、キャスト前に_obj2
_がすでにnull
であった場合にのみnull
となるため、問題は予想よりも早くなります。 (また、すぐに割り当てる場合は、_al1
_を初期化するために新しいArrayListを作成する必要はありません。単にArrayList al1 = (ArrayList) obj2;
と言ってください。)
任意のコレクションをJavaリストに変換するutilメソッドを作成できます
public static List<?> convertObjectToList(Object obj) {
List<?> list = new ArrayList<>();
if (obj.getClass().isArray()) {
list = Arrays.asList((Object[])obj);
} else if (obj instanceof Collection) {
list = new ArrayList<>((Collection<?>)obj);
}
return list;
}
以下の検証と組み合わせることもできます。
public static boolean isCollection(Object obj) {
return obj.getClass().isArray() || obj instanceof Collection;
}
むしろそれをオブジェクト配列にキャストします。
Object obj2 = from some source . . ;
Object[] objects=(Object[])obj2;
興味深い注意:オブジェクトからJavaFXアプリケーションスレッドのリストにキャストしようとすると、常にClassCastExceptionが発生するようです。
私はあなたと同じ問題を抱えていましたが、答えは役に立ちませんでした。しばらく遊んだ後、絞ることができたのはスレッドだけでした。 UIスレッド以外のスレッドでキャストするコードを実行すると、期待どおりに成功します。このセクションの他の回答が示唆しています。
したがって、ソースがJavaFXアプリケーションスレッドで実行されていないことに注意してください。
_Java.lang.Object
_からTの要素を持つ_ArrayList<T>
_に直接変換することは、例外のキャストにつながる可能性があるためお勧めしません。推奨される方法は、最初にT
のプリミティブ配列に変換し、次にArrays.asList(T[])
を使用することです。Java _javax.ws.rs.core.Response
_は次のとおりです-
_T[] t_array = response.readEntity(object);
ArrayList<T> t_arraylist = Arrays.AsList(t_array);
_
変換は失敗します(Java.lang.ClassCastException:Java.lang.String cannot be cast to Java.util.ArrayList)ため、確実にArrayList。さまざまなオブジェクトのタイプを確認します。