2017-04-06 96 views
0

我想创建一个方法,它可以接受一个对象类型作为参数,然后我可以使用它来实例化另一个对象。通用类型作为方法参数

例如,传递String类型的方法,该方法体内,做

List<String> l = new ArrayList<String>(); 
String s = new String("abc"); 

我如何去这样做呢?

编辑:

How to have Java method return generic list of any type?没有回答我的问题的第一部分。

作为一个后续,我可以在方法体内创建一个传入类型的实例,就像上面代码片段中的第二行一样吗?

+0

有很多关于Java中的泛型的教程......你是否至少尝试过其中一个教程? – Tom

+0

我已经阅读了几篇帮助我实现利用泛型的代码的教程。不幸的是,我无法解决这个问题。如果可能,链接将受到高度赞赏。 – user1889776

+0

那么,如果你学习泛型,你必须学会​​的第一件事就是你不能用通用类型调用'new',因为泛型类型在运行时不存在。 – RealSkeptic

回答

1

没有任何机制为了得到那只是泛型。你必须使用反射来获得。

public <T> T instantiator(Class<T> c){ 
    if (c != null){ 
     try { 
      return (T) c.getConstructor().newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return null; 
} 

但是,如果没有仔细使用,反射可能会失败。我刚刚写的这个方法工作正常,如果类有一个没有参数的构造函数。例如,instantiator(String.class);instantiator(Exception.class);会正常工作,因为有一个空的构造函数,但instantiator(Integer.class)不会运行。

+0

@Tom链接到上面的SO问题回答了我的问题的第一部分,这回答了第二部分。 – user1889776

相关问题