0

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

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

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

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

4

2 回答 2

5

首先,Method#getReturnType()声明为

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

并且javadoc声明它

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

该类Class提供了一种newInstance()方法,该方法可以使用无参数构造函数来创建实例,或者您可以使用该Class#getDeclaredConstructors()方法获取Constructor实例列表并使用它们的newInstance(Object...)方法创建所表示的类的实例。

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

于 2013-10-30T17:33:29.480 回答
2

由于类型本身是动态的,因此您不能声明该类型的变量,这是因为声明是编译时特性。

鉴于此,您可以实例化返回类型的对象:

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

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

于 2013-10-30T17:35:06.650 回答