Java - 使用泛型生成随机对象?

时间:2012-02-26 10:27:17

标签: java generics

我正在尝试使用泛型来创建一个可以是T类型的对象,这可能吗?

public class SoapObjectToModel <T> {

    public ArrayList<T> convert(SoapObject soapObject) {

        ArrayList<T> result = new ArrayList<T>();
        // Somehow initialize an object of type T

        }
}

2 个答案:

答案 0 :(得分:4)

您无法创建T类型的对象。

永远记住你可以永远拥有SoapObjectToModel<MyAbstractClass>,如果你尝试创建T会怎样?它会创建一个抽象类吗?

作为一种变通方法,您可能希望将T类型的元素作为参数传递,并使用reflection创建新对象,或者甚至更好 - 查看{{3 }}

答案 1 :(得分:1)

使用amit建议的工厂模式是解决此问题的一个非常好的解决方案,它也是保证工作的一般解决方案。然而,在某些情况下,使用反射的建议替代方案可能更容易。这是一个如何在您的特定情况下使用反射的实际示例:

class SoapObjectToModel<T> {

    private Class<T> type;

    public SoapObjectToModel(Class<T> type) {
        this.type = type;
    }

    public ArrayList<T> convert(SoapObject soapObject) {

        try {
            ArrayList<T> result = new ArrayList<T>();
            result.add(type.newInstance());
            return result;
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}