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

时间:2018-11-06 01:25:46

标签: 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。似乎是什么问题,为什么我会收到类型安全警告?

1 个答案:

答案 0 :(得分:4)

int x = array[10];

您在这里向呼叫者保证 。您是在告诉他们“无论我们使用的是model.find({ 'level1.level_name': level, 'level1.step.field_name': subject, 'level1.step.sub_step.field_name1':'data1', 'level1.step.sub_step.field_name2':'data2' }).project({'level1.step.sub_step.field_name3': true, _id: false}) 的哪个子类,此方法都将返回可以安全地视为public <K extends ClassB> K someMethod(T t) { return null; } any 子类的值” 。然后,您的子类SuperClass就会出现,并通过创建仅返回ClassB的版本来违反承诺,这直接违反了您已订立的合同。通用Main / ClassA声明是对调用方的承诺,而不是扩展代码的人。