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
implementsIDataType
在这种情况下,您可以使用实现
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");