2013-02-19 65 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