Java中如何正确转换带泛型限定的Class类型引用?
解决Class<? extends GreatGrandParentClass>转Class<? extends FavoriteCousin>的类型转换问题
你之前的转换犯了类型混淆的错误:typeObject是Class类型对象(比如String.class这种),但你却试图把它强转成FavoriteCousin类的实例,这完全是两种不同的类型,必然触发类型不兼容错误。
正确的做法是对Class的泛型参数进行转换,步骤如下:
先做类型安全检查
用isAssignableFrom确认typeObject确实是FavoriteCousin的子类或本身,避免运行时类型异常:if (FavoriteCousin.class.isAssignableFrom(typeObject)) { // 后续转换逻辑 }执行Class类型的强制转换
因为已经确认类型兼容,直接对Class对象的泛型参数进行强转,就可以得到符合needsCousin方法要求的类型:@SuppressWarnings("unchecked") // 消除编译器的未检查转换警告 Class<? extends FavoriteCousin> cousinClass = (Class<? extends FavoriteCousin>) typeObject; needsCousin(cousinClass);
补充说明
FavoriteCousin.class.isAssignableFrom(typeObject)的作用是判断FavoriteCousin是否是typeObject代表的类的父类、接口或本身,正好匹配你确认类型的需求。加上@SuppressWarnings("unchecked")是因为编译器无法在编译期完全验证这个转换的安全性,但我们已经通过前置检查确保了类型兼容,所以这个警告可以安全消除。
内容的提问来源于stack exchange,提问作者Shane Gillis
相关产品推荐
相关产品推荐

