使用Java反射的getReturnType()来创建该类型的新对象

时间:2013-10-30 17:25:42

标签: java reflection

我想知道我是否可以使用返回类型的java反射方法getReturnType()来创建该类型的对象。

我有一个返回String的方法,假设我们在运行时不知道,所以我调用getReturnType()来确定该方法返回的对象类型:

Method myMethod = Book.class.getDeclaredMethod("printName");
Type myType = myMethod.getReturnType();

我想知道是否可以使用myType创建新对象或我该怎么做?我试过mytype something = new mytype();,但这是错的。

2 个答案:

答案 0 :(得分:5)

首先,Method#getReturnType()被声明为

 Class<?> java.lang.reflect.Method.getReturnType()

并且javadoc声明它

  

返回表示正式返回类型的Class对象   此Method对象表示的方法。

Class类提供newInstance()方法,可以使用无参数构造函数创建实例,也可以使用Class#getDeclaredConstructors()方法获取Constructor列表实例并使用他们的newInstance(Object...)方法创建所表示的类的实例。

您无法创建该类型的变量,因为在编译时类型未知。

答案 1 :(得分:2)

由于类型本身是动态的,因此您无法声明该类型的变量,因为声明是编译时功能。

鉴于此,您可以使用返回类型的对象:

try {
  Method myMethod = Book.class.getDeclaredMethod("printName");
  Class<?> type = myMethod.getReturnType();
  Object instance = type.newInstance();
} 
catch (...) {
}

问题是你无法知道getReturnType()返回Class的类型变量,你只知道这是Class<?>所以没有办法静态地知道它的类型由type.newInstance()生成的实例,因此您将其存储在Object