2013-10-30 70 views
0

我想知道是否可以使用返回類型的java反射方法getReturnType()來創建該類型的對象。使用Java反射的getReturnType()創建該類型的新對象

我有一個返回字符串的方法,假設我們不知道,在運行時間,所以我叫getReturnType(),以確定哪種類型的對象的方法返回:

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

我想知道是否可以使用myType來創建新的對象,或者我該怎麼做?我試過mytype something = new mytype();但它是錯誤的。

+0

等等,你想創建myType的*對象*還是myType的***變量***?巨大差距。 –

+0

@HovercraftFullOfEels對不起,我的錯誤,對象,使用'mytype something = new mytype();' –

回答

5

首先,Method#getReturnType()被聲明爲這樣

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

和的Javadoc指出它

返回Class對象,它表示由該Method對象表示的 方法的正式返回類型。

Class類提供了一個newInstance()方法,該方法可以使用無參數的構造函數創建一個實例,或者您可以使用Class#getDeclaredConstructors()方法獲取Constructor實例的列表,並使用他們newInstance(Object...)方法來創建類的實例表示。

您將無法創建該類型的變量,因爲該類型在編譯時未知。

+1

現在很清楚。 Eyxaristo;) –

2

由於類型本身是動態的,因此不能聲明該類型的變量,這是因爲聲明是編譯時功能。

鑑於這種情況,你可以istantiate返回類型的對象:

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

的問題是,你可以不知道類型的變量getReturnType()返回Class,你只知道這是一個Class<?>如此無法靜態知道由type.newInstance()生成的實例的類型,因此您將它存儲在Object內。

相關問題