Java 如何将数据类型作为参数传递以创建此类型的ArrayList?

Java 如何将数据类型作为参数传递以创建此类型的ArrayList?,java,arraylist,Java,Arraylist,比如说,我有一些类似于: public void do(DataType type) { ArrayList<DataType> list = new ArrayList<DataType>(); doStuff(); } public void do(数据类型){ ArrayList=新建ArrayList(); doStuff(); } 在某些情况下,我想通过将类型作为参数传递来创建另一种类型的arrayList,如何在Java中做到这一点?试试这

比如说,我有一些类似于:

public void do(DataType type) {
    ArrayList<DataType> list = new ArrayList<DataType>();
    doStuff();
}
public void do(数据类型){
ArrayList=新建ArrayList();
doStuff();
}
在某些情况下,我想通过将类型作为参数传递来创建另一种类型的arrayList,如何在Java中做到这一点?

试试这个

    public <T> void stuff(T type){
        ArrayList<T> arrayList = new ArrayList<T>();
        doStuff();
    }
public-void-stuff(T型){
ArrayList ArrayList=新的ArrayList();
doStuff();
}

如果您想创建表示它的单个对象,泛型可能会对您有所帮助,但如果您想要一个简单的私有属性,简单的方法是这样的。

我假设您想要这样的东西:

public static <T>List<T> makeList(T t) {
    List<T> list = new ArrayList<T>();
    // doStuff();
    return list;
}

更普遍的做法如下:

public <T extends IDataType> void doSomething(T type) {
    ArrayList<T> list = new ArrayList<T>();
    doStuff();
}
public void doSomething(T型){
ArrayList=新建ArrayList();
doStuff();
}
其中:
DataType
implements
IDataType


在这种情况下,您可以使用实现
IDataType

Java不允许将类类型作为方法参数传递的任何类型。据我所知,你能得到的最接近的是:

import java.util.*;

class MyClass<T> {

    public void stuff() {
        ArrayList<T> list = new ArrayList<T>();
        //doStuff();
    }

}

class Test {        
    public static void main(String args[]) {
        (new MyClass<String>()).stuff();
        (new MyClass<Integer>()).stuff();
    }
}
import java.util.*;
类MyClass{
公共物品{
ArrayList=新建ArrayList();
//doStuff();
}
}
类测试{
公共静态void main(字符串参数[]){
(新MyClass()).stuff();
(新MyClass()).stuff();
}
}

因此,每次需要时,您都需要实例化该类。

您正在寻找类似的内容吗

public static <T> List<T> doSomething(Class<T> clazz){
    ArrayList<T> testList = new ArrayList<T>();
    return testList;
    // more code
}
公共静态列表doSomething(类clazz){
ArrayList testList=新的ArrayList();
返回测试列表;
//更多代码
}
你可以这样调用:

List<Integer> intList = doSomething(Integer.class);
intList.add(1);
List<String> stringList = doSomething(String.class);
stringList.add("test");
List intList=doSomething(Integer.class);
增加(1);
List stringList=doSomething(String.class);
添加(“测试”);

如果要限制所需的类的类型,可以使用T扩展数据类型。如果@subhash所解释的不是您想要的,如果@zoyd所解释的是真的,那么我相信这可能会有一些用处。

这在Java中是不可能的。请尝试genericsCheck:。您不能将数据类型作为参数传递给方法,只能传递该数据类型的值。顺便说一句,do不能是方法名称。它是保留字。我怎么知道代码中的T是什么?类似于
if(T.dataType.equals(Integer)){doStuff()}或者if(T.dataType.equals(Double)){doSomethingElse()}
use instanceof关键字如何将ArrayList强制转换为Double,如果我想的话?在这段代码中,参数是一个对象,而不是数据类型。这不是OP要求的。例如,这段代码允许使用stuff(newinteger(42))(为了清晰起见,显式装箱),但不允许使用stuff(Integer),这正是OP所需要的。请查看我的代码,如果这不能解决OP所寻找的问题,请告诉我。在您的代码中,参数的值是表示类类型的对象,这与类类型不同。当然,这也解决了OP的问题。主要区别在于你的方法使用反射,而我的方法不使用反射。
List<Integer> intList = doSomething(Integer.class);
intList.add(1);
List<String> stringList = doSomething(String.class);
stringList.add("test");