使用泛型返回类型的覆盖方法,没有警告

时间:2015-03-18 13:17:41

标签: java generics

简单的问题:我想要@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为你提供帮助(我知道这是一个可怕的......无法抗拒。)

1 个答案:

答案 0 :(得分:2)

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

interface Overridable {
  Stuff getStuff();
}

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