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

时间:2014-04-30 09:26:19

标签: java arraylist

让我说我有类似的东西:

public void do(DataType type) {
    ArrayList<DataType> list = new ArrayList<DataType>();
    doStuff();
}

在某些情况下,我想通过将类型作为参数传递来创建另一种类型的arrayList,我该如何在Java中执行此操作?

5 个答案:

答案 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解释的是真的,那么我相信这可能有用。