2016-02-19 41 views
1

這是事情。 我們在我們的應用程序中使用了很多Wicket Panels,並且爲了測試目的,它們應該在一般情況下生成。在理論上,這部分工作:對於構造函數中的每個參數類型,我只提供一個可能的參數,因此它是查找這些參數類型是什麼的問題 - 反射。 問題是:類型擦除。許多構造函數使用類的多個版本作爲具有各種不同類型參數的參數。類型擦除意味着,據我所知,我無法在運行時區分它們。 那麼,在這種情況下,是否有任何方法可以克服或規避類型刪除?是否有可能以某種方式克服Java中的類型擦除?

+6

你能發表相關的代碼嗎?類型擦除是Java語言規範的一部分,因此無法「關閉」,但可能會解決您的問題。 –

回答

4

在使用反射很久以前,您會遇到問題,如果您解決此問題,則不必再擔心。

由於無法區分Model<A>Model<B>之間的差異,因此不能重載兩種方法或具有這些類型的構造函數。相反,你需要創建一個方法,這需要Model<C>其中C是A的超類/接口和B.

,因爲他們擁有你不能做到這一點

interface A extends C { } 
interface B extends C { } 

class MyClass { 
    MyClass<Model<A> modelA) { } 
    MyClass<Model<B> modelB) { } 

這不會編譯擦除後相同的簽名所以不是你可以做

class MyClass { 
    MyClass<Model<? extends C> model) { } 

這不僅編譯但在運行時不會產生歧義。

相關問題