Java泛型问题

Java泛型问题,java,generics,Java,Generics,是否可以编写一个可以创建任何指定类型实例的方法 我认为java泛型应该有所帮助,所以可能是这样的: public <U> U getObject(Class klass){ //... } public U getObject(类klass){ //... } 有人能帮我吗?public U getObject(类klass) public <U> U getObject(Class<U> klass) throw

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

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

    public <U> U getObject(Class klass){
        //...
    }
public U getObject(类klass){
//...
}
有人能帮我吗?

public U getObject(类klass)
public <U> U getObject(Class<U> klass) 
    throws InstantiationException, IllegalAccessException
{
    return klass.newInstance();
}
抛出实例化异常,IllegalAccessException { 返回klass.newInstance(); }
不过,这种方法几乎没有“问题”:

  • 类必须具有不带参数的构造函数
  • 若构造函数抛出任何选中的异常,它将被传播,即使您的
    getObject
    方法没有在
    抛出
    部分声明它
有关详细信息,请参阅文档。

public U genericFactory(构造函数类构造函数,对象..args)
 public <U> U genericFactory(Constructor<U> classConstructor, Object..args)
  throws
   InstantiationException,
   IllegalAccessException,
   IllegalArgumentException,
   InvocationTargetException {
     return classConstructor.newInstance(args);
 }
投掷 实例化异常, 非法访问例外, IllegalArgumentException, 调用目标异常{ 返回classConstructor.newInstance(args); }
您可以通过
getConstructors
方法从
Class
对象获取构造函数。通过构造函数本身,您可以获得有关参数的信息,因此需要在这个工厂之外有一些额外的代码来适当地填充参数


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

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

public interface MyFactory<T> {
     T newInstance();
}
公共接口MyFactory{
T newInstance();
}

这个类是用泛型实现的,因此实际上没有必要将它自己的泛型
newInstance()
包装到另一个方法中。是的,我同意。我只是填写了问题中的“模板”,这些不是问题;事实就是这样。你对这个问题给出了准确的答案。添加重载方法getObject(类clazz,Object…args)就完成了。我同意滥用反射是不可取的,但使用此解决方案,设计需要制造的每个类都有另一个类,或者在制造其他类之前必须有一个类的成员,由于接口方法不能是静态的,所以可以使用一个简短的匿名内部类来实现(可能被分配到一个静态的final字段,但因为对象创建速度太快,甚至可能令人感到悲观。话虽如此,Java语法确实很糟糕,JRE在处理许多类时往往不是很节省内存。@Tom,你能更详细地解释一下吗?