2013-02-19 34 views
3

我正在使用classloader加載一個類,它返回我Class<?>,現在我想將該類傳遞給另一個需要Class<? extends SomeClass>的方法或函數。擺脫未經檢查的反射投射

現在,當我嘗試投:

Class<?> clazzFromClassLoader = Class.forName(nameOfClass); 
Class<? extends Someclass> clazz = (Class<? extends SomeClass>)clazzFromClassLoader; 
//second line gives unchecked cast warning 

我可以確保沒有使用

SomeClass.isAssignableFrom(clazzFromClassLoader); 

但有擺脫選中投的方式無類轉換異常?

+0

是的,我能做到這一點。泛型給了一些東西,但帶走了一些東西 – 2013-02-19 14:19:04

+0

此鏈接 - http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ006可能會有所幫助。 – 2013-02-19 14:26:48

回答

8

是:你可以寫:

Class<? extends Someclass> clazz = 
    clazzFromClassLoader.asSubclass(Someclass.class); 

(有關詳細信息,請參閱asSubclass's Javadoc

+0

Ohh Bummer我試過但是以相反的方式。謝謝。我知道了。 – 2013-02-19 14:36:51

+0

@NarendraPathai:不客氣! – ruakh 2013-02-19 14:39:23