Java泛型问题

时间:2009-09-19 13:06:58

标签: java generics

是否可以编写一个可以创建任何指定类型实例的方法?

我认为java泛型应该有帮助,所以它可能是这样的:

    public <U> U getObject(Class klass){
        //...
    }

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:9)

public <U> U getObject(Class<U> klass) 
    throws InstantiationException, IllegalAccessException
{
    return klass.newInstance();
}

这种方法几乎没有“问题”:

  • 类必须具有不带参数的构造函数
  • 如果构造函数抛出任何已检查的异常,它将被传播,即使您的getObject方法未在throws部分中声明它。

有关详细信息,请参阅Class.newInstance()文档。

答案 1 :(得分:8)

 public <U> U genericFactory(Constructor<U> classConstructor, Object..args)
  throws
   InstantiationException,
   IllegalAccessException,
   IllegalArgumentException,
   InvocationTargetException {
     return classConstructor.newInstance(args);
 }

您可以通过Class<U>方法从getConstructors对象获取构造函数。通过构造函数本身,您可以获取有关参数的信息,因此需要在此工厂外部添加一些额外的代码以适当填充参数。

显然,这和彼得的答案一样难看。

答案 2 :(得分:8)

我强烈建议尽可能使用工厂界面,而不是滥用反射。

public interface MyFactory<T> {
     T newInstance();
}