13

通常、汎用の非プリミティブ ArrayList を初期化したい場合は、これを行います

ArrayList<?> arrayList = new ArrayList<MyClass.class>();

しかし、どのクラスオブジェクトを渡しても、これと同様のことをしたい、つまり

private void getModel(Class responseType){

   //Something similar, because this does not work..                                                       
   ArrayList<?> arrayList = new ArrayList<responseType>();
}

どんな助けでも大歓迎です。

4

3 に答える 3

17

このようなことを試してください

     private <T> void setModel(Class<T> type) {
      ArrayList<T> arrayList = new ArrayList<T>();
   }

リストを元に戻したい場合

private <T> ArrayList<T> getModel(Class<T> type) {
      ArrayList<T> arrayList = new ArrayList<T>();
      return arrayList;
   }

編集

ARRAYLIST にジェネリック型を使用する方法を示す完全な例

メイン メソッドとジェネリック メソッドを持つテスター クラス

public class Tester {

    private <T> ArrayList<T> getModels(Class<T> type) {
        ArrayList<T> arrayList = new ArrayList<T>();
        return arrayList;
    }


    public static void main(String[] args) {
        Data data = new Data(12, "test_12");
        Magic magic = new Magic(123, "test_123");

        Tester t = new Tester();

        ArrayList<Data> datas = (ArrayList<Data>) t.getModels(Data.class);
        datas.add(data);
        for(Data data2 : datas) {
            System.out.println(data2);
        }

        ArrayList<Magic> magics = (ArrayList<Magic>) t.getModels(Magic.class);
        magics.add(magic);
        for(Magic magic2 : magics) {
            System.out.println(magic2);
        }

    }

}

メソッド内で使用しないため、パラメーターなしで同じものを使用する別の可能性

public class Tester {

    private <T> ArrayList<T> getModel() {
        ArrayList<T> arrayList = new ArrayList<T>();
        return arrayList;
    }


    public static void main(String[] args) {
        Data data = new Data(12, "test_12");
        Magic magic = new Magic(123, "test_123");

        Tester t = new Tester();

        ArrayList<Data> datas =  t.getModel();
        datas.add(data);
        for(Data data2 : datas) {
            System.out.println(data2);
        }

        ArrayList<Magic> magics = t.getModel();
        magics.add(magic);
        for(Magic magic2 : magics) {
            System.out.println(magic2);
        }

    }

}

モデルクラス (データ)

public class Data {

    private Integer id;
    private String name;


    public Data() {
    }


    public Data(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
    }


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public String toString() {
        return "Data [" + (id != null ? "id=" + id + ", " : "") + (name != null ? "name=" + name : "") + "]";
    }

}

モデルクラス(マジック)

public class Magic {

    private Integer id;
    private String name;


    public Magic() {
    }


    public Magic(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
    }


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public String toString() {
        return "Data [" + (id != null ? "id=" + id + ", " : "") + (name != null ? "name=" + name : "") + "]";
    }

}
于 2013-03-29T06:01:09.700 に答える
2

これは機能します:

private void getModel(){
   ArrayList<?> arrayList = new ArrayList<Object>();
}

つまり、あなたが何をしようとしているのかは不明です。Generics は純粋にコンパイル時であり、コンパイル時の型チェックを実行します。したがって、コンパイル時に型パラメーターが不明な場合は、役に立ちません。

于 2013-03-29T20:49:15.050 に答える
0

以下を使用してみてください

public <T> List<T> getList(Class<T> requiredType) {
    return new ArrayList<T>();
}

public void useList() {
    List<Integer> ints = getList(Integer.class);
    List<String> lists = getList(String.class);
}
于 2013-03-29T06:10:05.523 に答える