2012-02-26 37 views
0

我想用泛型来创建一个可以是T类型的对象,这可能吗?Java - 使用泛型生成随机对象?

public class SoapObjectToModel <T> { 

    public ArrayList<T> convert(SoapObject soapObject) { 

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

     } 
} 
+1

有多少次被问过? – 2012-02-26 13:07:04

回答

4

您不能创建类型为T的对象。

永远记住,你总是可以有SoapObjectToModel<MyAbstractClass>,如果你尝试创建T会发生什么?它会创建一个抽象类吗?

作为一种变通方法,您可能希望T类型的元素作为参数传递,并且使用reflection创建一个新的对象,甚至更好 - 看看在Factory Design Pattern

+0

下载者是否会关注评论? – amit 2012-02-26 10:32:53

+0

你可以用java反射来做到这一点。在你的例子中,它会抛出一个异常,但通常它是可能的 – Tim 2012-02-26 10:33:36

+0

@Tim:你怎么能做到这一点,没有'T'的简洁对象,你将需要一个实例 - 然后你可以做到 - 因为我提到,还是使用工厂模式 – amit 2012-02-26 10:37:05

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; 
    } 
}