4

Arraylist''を' 'に変換するためのより洗練されたソリューションはありArraylist<Type>ますか?

現在のコード:

ArrayList productsArrayList=getProductsList();
ArrayList<ProductListBean> productList = new ArrayList<ProductListBean>();

for (Object item : productsArrayList)
{
  ProductListBean product = (ProductListBean)item;
  productList.add(product);
}
4

3 に答える 3

10
ArrayList<ProductListBean> productList = (ArrayList<ProductListBean>)getProductsList();

これは本質的に安全ではないため、getProductsListを更新できない場合にのみ使用する必要があることに注意してください。

于 2009-07-07T10:15:14.170 に答える
4

Javaに関して型消去を検索します。

コレクションを含むものとして入力することは、コレクションProductListBeanのコンパイル時の注釈であり、コンパイラーはこれを使用して、ユーザーが正しいことを行っているかどうかを判断できます(つまり、Fruitクラスの追加は無効になります)。

ただし、一度コンパイルするとArrayList、タイプ情報が消去されたため、コレクションは単純になります。したがって、ArrayList<ProductListBean>ArrayListは同じものであり、キャスト(マシューの回答のように)は機能します。

于 2009-07-07T10:20:18.530 に答える
1

説明する方法はタイプセーフです(実際にはそうではありませんが、間違えるとClassCastExceptionがスローされます)が、これを行うにはおそらく最も遅く、最も冗長な方法です(かなり明確ですが)。単純にArrayListをキャストする例が最も高速ですが、投稿者が指摘しているように、タイプセーフではないため、とにかくそれを別のリストにコピーすることをお勧めします。これをArrayListにコピーする必要性をあきらめる準備ができていて、代わりにListに満足している場合(そうあるべきです)、単に次のようにします。

List<ProductListBean> productList = 
        Arrays.asList(((List<ProductListBean>)getProductsList()).toArray(new ProductListBean[] {}));

基になるコピーはネイティブメソッドであるSystem.arraycopyで行われるため高速であり、タイプセーフです(これも実際にはそうではありませんが、例と同じくらい安全です)。System.arraycopyは、何かを追加しようとするとArrayStoreExceptionをスローするためです。同じタイプではありません。

于 2009-07-07T11:46:34.220 に答える