web-dev-qa-db-ja.com

Java.lang.ObjectをArrayListに変換する方法は?

Java.lang.Objectという形式の有効なArrayListオブジェクトがあります。 ObjectArrayListに再度変換する必要があります。私はこれを試しました:

オブジェクトobj2 =あるソースから。 。 ; 
 ArrayList al1 = new ArrayList(); 
 al1 =(ArrayList)obj2; 
 System.out.println( "List2 Value:" + al1); 

しかし、それはnullを出力しています。これどうやってするの?

16
sjain

これは、キャスト前に_obj2_がすでにnullであった場合にのみnullとなるため、問題は予想よりも早くなります。 (また、すぐに割り当てる場合は、_al1_を初期化するために新しいArrayListを作成する必要はありません。単にArrayList al1 = (ArrayList) obj2;と言ってください。)

12
Kilian Foth

任意のコレクションを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;
}
5
Lucas Pires

むしろそれをオブジェクト配列にキャストします。

Object obj2 = from some source . . ;
Object[] objects=(Object[])obj2;
1
vinay

興味深い注意:オブジェクトからJavaFXアプリケーションスレッドのリストにキャストしようとすると、常にClassCastExceptionが発生するようです。

私はあなたと同じ問題を抱えていましたが、答えは役に立ちませんでした。しばらく遊んだ後、絞ることができたのはスレッドだけでした。 UIスレッド以外のスレッドでキャストするコードを実行すると、期待どおりに成功します。このセクションの他の回答が示唆しています。

したがって、ソースがJavaFXアプリケーションスレッドで実行されていないことに注意してください。

1
matt_frangakis

_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);
_
1
ARK

変換は失敗します(Java.lang.ClassCastException:Java.lang.String cannot be cast to Java.util.ArrayList)ため、確実にArrayList。さまざまなオブジェクトのタイプを確認します。

0
khadre