java - ArrayList<anyClassObject> 的动态初始化

标签 java generics arraylist

通常,如果我们想初始化一个通用的非原始 ArrayList,我们会这样做

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

但无论我传递哪个类对象,我都想做类似的事情,即

private void getModel(Class responseType){

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

任何帮助将不胜感激。

最佳答案

尝试这样的事情

     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 : "") + "]";
    }

}

关于java - ArrayList<anyClassObject> 的动态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15697775/

相关文章:

java - 在静态方法中调用ArrayList的实例

java - 将字节数组写入文件并在java中查看该文件

c#泛型基类方法返回派生类的类型

java - 使用包含数据的新 Array 或 ArrayList 调用父类(super class)的构造函数?

Java:通过使用泛型摆脱 if else

java - 为什么这段带有泛型的java代码不能编译

java - 将excel字符串数据存储到数组列表中

java - 两个应用程序的 session 维护

java - 从 UncaughtExceptionHandler 中重新执行任务?

java - 运行 Maven OSGi 项目时出错