一个简单的问题:我有一个要@Override的有界通用方法。

class Stuff {}
class SeriousStuff extends Stuff {}

interface Overridable {
    <T extends Stuff> T getStuff();
}


如何在不对整个Overridable接口进行参数化并且没有未检查的转换警告的情况下执行此操作?

class SeriourExample implements Overridable {
    SeriousStaff getStuff() { return new SeriousStuff(); }
    ||
    \/
    /* WARNING: Type safety: The return type SeriousStaff for
     * getStuff() from the type SeriourExample needs unchecked
     * conversion to conform to T from the type Overridable
     */
}


如果添加@SuppressWarnings("unchecked")仍然礼貌公正,那对我来说还可以。

我知道this,但是仍然无法利用建议的解决方案,因为我不能使用?通配符。

感谢? extends Reader的帮助(这是我所知道的..无法抗拒的可怕。)

最佳答案

我只是摆脱泛型并使用协变返回类型:

interface Overridable {
  Stuff getStuff();
}

class SeriourExample implements Overridable {
  @Override SeriousStuff getStuff() { ... }
}

07-26 07:32