如何定义兼容所有ISomething实现类的Java Class类型?
解决Class无法赋值子类Class对象的问题
原代码编译失败的核心原因是Java泛型的不变性:Class<T>属于不变类型,Class<ISomething>只能接受ISomething.class,而A.class的实际类型是Class<A>,B.class是Class<B>——这两个类型和Class<ISomething>之间没有继承关系,因此编译器会直接报错。
你需要把类型替换为Class<? extends ISomething>,这个带通配符的类型表示「所有实现或继承了ISomething的类的Class对象」,完全匹配你的需求。
修改后的合法代码如下:
// 替换原有的Class<ISomething> Class<? extends ISomething> klass; klass = A.class; klass = B.class; // 额外说明:这行也合法,因为ISomething本身也符合? extends ISomething的范围 klass = ISomething.class;
内容的提问来源于stack exchange,提问作者Joe Smith
相关产品推荐
相关产品推荐

