2013-01-10 85 views
3

我想使用Java Generics功能來實現通用功能。但我不知道爲自定義類對象獲取java.lang.reflect.Type對象。以下是我的情況,我想從一個給定的類名得到一個類型,它傳遞給ProcessedResult<T>更換T如何獲取自定義類對象的java.lang.Type對象?

String className = getClassName(); 
Class clazz = Class.forName(className); 
Type type = null; 
ProcessedResult<T> result = new ProcessedResult<T>(); 

我嘗試使用ProductModel.class.getGenericSuperclass(),但正如它的名字,它只是返回其超強的類型類。

有人可以幫我嗎?謝謝。

+0

你的意思是'java.lang.reflect.Type'? 'java.lang'中沒有'Type'。你能提供一些代碼來顯示你的問題,理想情況下是一個[SSCCE](http://sscce.org),我們可以通過javac來查看這個問題? –

+0

你是什麼意思術語*自定義類對象*? – Andremoniy

+1

@MilindAnantwar這與Subversion有什麼關係? –

回答

3

java.lang.reflect.Type不是通用接口。

此外,如果你想Type使用,

可以使用instance.getClass()ClassName.class因爲它返回Class<?>Class實現Type接口。所以它應該工作。

你將不得不使用ProcessedResult<Type>ProcessedResult<Class<?>>

+0

請檢查我的更新。 –

5

不能指定運行時確定的類型作爲泛型類型編譯時替換。

您的類型T實際上只在編譯時because of type erasure執行。所以當你在運行時有一個實際的類型時,任何信息或檢查已經完成並消失了。

您的ProcessedResult將不得不與Class<T>Type對象一起工作,而不是做任何有用的工作。

相關問題