java-使用泛型时遇到类型安全警告
作者:互联网
我有一堂课,看起来像这样.
class SuperClass<T> {
public <K extends ClassB> K someMethod(T t) {
return null;
}
}
class ClassB {
}
class ClassA extends ClassB {
}
class ClassC {
}
public class Main extends SuperClass<ClassC>{
@Override
public ClassA someMethod(ClassC c) { //type safety warning in ClassA
return null;
}
}
根据我的理解,someMethod()的返回类型可以是扩展ClassB或ClassB本身的任何类.显然,ClassA是ClassB.似乎是什么问题,为什么我会收到类型安全警告?
解决方法:
public <K extends ClassB> K someMethod(T t) {
return null;
}
您在这里向来电者保证.您在告诉他们“无论我们使用的是SuperClass的哪个子类,此方法都将返回可以安全地视为ClassB的任何子类的值”.然后,通过创建仅返回ClassA的版本,您的子类Main就会兑现并兑现承诺,这直接违反了您已订立的合同.通用扩展/超级声明是对调用者的承诺,而不是对扩展代码的人的承诺.
标签:generics,type-safety,java 来源: https://codeday.me/bug/20191024/1924325.html