Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList的动态初始化<;anyClassObject>;_Java_Generics_Arraylist - Fatal编程技术网

Java ArrayList的动态初始化<;anyClassObject>;

Java ArrayList的动态初始化<;anyClassObject>;,java,generics,arraylist,Java,Generics,Arraylist,通常,如果我们想初始化一个通用的非基本ArrayList,我们会这样做 ArrayList<?> arrayList = new ArrayList<MyClass.class>(); ArrayList ArrayList=new ArrayList(); 但无论我传递哪个类对象,我都想做类似的事情,即 private void getModel(Class responseType){ //Something similar, because this d

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

ArrayList<?> arrayList = new ArrayList<MyClass.class>();
ArrayList ArrayList=new ArrayList();
但无论我传递哪个类对象,我都想做类似的事情,即

private void getModel(Class responseType){

   //Something similar, because this does not work..                                                       
   ArrayList<?> arrayList = new ArrayList<responseType>();
}
private void getModel(类响应类型){
//类似的东西,因为这不起作用。。
ArrayList ArrayList=新的ArrayList();
}

任何帮助都将不胜感激。

试试这样的方法

     private <T> void setModel(Class<T> type) {
      ArrayList<T> arrayList = new ArrayList<T>();
   }
模型课(魔术)

尝试使用下面的方法

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);
}
public List getList(类requiredType){
返回新的ArrayList();
}
公共无效使用列表(){
List ints=getList(Integer.class);
List lists=getList(String.class);
}
这项工作:

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

我的意思是,不清楚你想做什么。泛型是纯编译时m,用于执行编译时类型检查。因此,如果类型参数在编译时是未知的,那么它将是无用的。

这个私有的void getModel(T extends对象){ArrayList ArrayList=new ArrayList();}怎么样呢?泛型是为了编译时的类型安全<编译后,code>ArrayList被类型擦除为
ArrayList
。无法在运行时调用
new ArrayList()
,您必须调用
new ArrayList()
@Vinoth。请详细说明这不起作用。ArrayListI已经写过,您无法初始化您不知道的某些类型的列表。您唯一的选择是使用非通用版本的
ArrayList
。您甚至不需要
Class
参数,因为它从未使用过。只需将其关闭,即可从调用站点推断类型。当然,您刚刚重新发明了Guava的
list.newArrayList()
方法。@Festus您在哪里铸造类类型?i、 e类类型?您没有使用
类型
。为什么不将其声明为
私有ArrayList getModels()
?@FestusTamakloe:是的,如果删除该参数,编译器在某些情况下可能会在推断T时出现问题,但调用方始终可以显式指定它。在这种情况下,您没有使用
requiredType
。为什么不将其声明为
public List getList()
?如果您知道对象的类类型(可能是您正在从包含类名信息等的文件加载一些数据),那么上述方法将非常有用。因为否则,您必须通过if/else检查强制转换为正确的类型。但是你是对的。。除此之外,在这种情况下,我们可以简单地使用T,或者根本不需要这样的方法
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 : "") + "]";
    }

}
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);
}
private void getModel(){
   ArrayList<?> arrayList = new ArrayList<Object>();
}