让我说我有类似的东西:
public void do(DataType type) {
ArrayList<DataType> list = new ArrayList<DataType>();
doStuff();
}
在某些情况下,我想通过将类型作为参数传递来创建另一种类型的arrayList,我该如何在Java中执行此操作?
答案 0 :(得分:6)
试试这个..
public <T> void stuff(T type){
ArrayList<T> arrayList = new ArrayList<T>();
doStuff();
}
如果你想创建代表它的单个对象,那么泛型可能对你有所帮助,但当你想要一个简单的私有属性时,这很简单。
答案 1 :(得分:1)
我认为你想要这样的东西:
public static <T>List<T> makeList(T t) {
List<T> list = new ArrayList<T>();
// doStuff();
return list;
}
使用makeList
函数:
makeList("String list").add("new String"); // ok
makeList("String list").add(5); // compile error
答案 2 :(得分:1)
更普遍的做法如下:
public <T extends IDataType> void doSomething(T type) {
ArrayList<T> list = new ArrayList<T>();
doStuff();
}
其中:DataType
实现IDataType
在这种情况下,您可以使用任何实现IDataType
答案 3 :(得分:1)
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();
}
}
因此,您需要在每次需要时实例化该课程。
答案 4 :(得分:1)
你在找这样的东西吗?
public static <T> List<T> doSomething(Class<T> clazz){
ArrayList<T> testList = new ArrayList<T>();
return testList;
// more code
}
你可以这样调用:
List<Integer> intList = doSomething(Integer.class);
intList.add(1);
List<String> stringList = doSomething(String.class);
stringList.add("test");
如果你想限制你需要的类的类型,你可以使用T extends youDataType。如果@subhash解释的不是你想要的那个,如果@zoyd解释的是真的,那么我相信这可能有用。