编程语言
首页 > 编程语言> > java-使用泛型时遇到类型安全警告

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