我想知道我是否可以使用返回类型的java反射方法getReturnType()来创建该类型的对象。
我有一个返回String的方法,假设我们在运行时不知道,所以我调用getReturnType()
来确定该方法返回的对象类型:
Method myMethod = Book.class.getDeclaredMethod("printName");
Type myType = myMethod.getReturnType();
我想知道是否可以使用myType
创建新对象或我该怎么做?我试过mytype something = new mytype();
,但这是错的。
答案 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
。