java - 使用泛型时遇到类型安全警告

标签 java generics type-safety

我有一个看起来像这样的类。

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() 的返回类型可以是任何扩展 ClassBClassB 本身的类。显然 ClassAClassB。似乎是什么问题,为什么我会收到类型安全警告?

最佳答案

public <K extends ClassB> K someMethod(T t) {
    return null;
}

您在这里向来电者保证。您是在告诉他们“无论我们使用的是 SuperClass 的哪个子类,此方法都会返回一个值,该值可以安全地视为 任何子类B 类”。然后你的子类 Main 出现并打破了这个 promise ,制作了一个只返回 ClassA 的版本,这直接违反了你所订立的契约(Contract)。通用 extends/super 声明是对调用者的 promise ,而不是对扩展代码的人的 promise 。

关于java - 使用泛型时遇到类型安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164567/

相关文章:

Java发现时间之间的差异

java - gradle 从运行时依赖项中排除特定的 jar

java - 检查条件安全性并在同一 if 语句中进行评估

php - 如何实现类型化/类型安全的迭代器?

c++ - 原始类型的强 typedef (BOOST_STRONG_TYPEDEF 不会削减它)

java - 调用 View.draw(Canvas) 方法时出现 ArrayIndexOutOfBoundException

java - 从 Java 中的另一个类接收对象数组的参数?

java - 身份方法做什么,通用单例java

c++ - 如何创建用于 QML 的通用对象模型?

Java - 从类型 A 的类对象获取类型 A 数组的类对象?