通用方法 - “未经检查的转换以符合类型中的T”警告

时间:2012-02-21 16:58:24

标签: java generics

如果我有以下内容:

public interface Foo {
   <T extends Foo> T getBlah();
}

public class Bar implements Foo {
   public Bar getBlah() {  
      return this;
   }
}

我在eclipse中收到关于类Bar中'getBlah'实现的警告:

- Type safety: The return type Bar for getBlah from the type Bar needs unchecked conversion to conform to T from the type 
 Foo

我该如何解决这个问题?为什么我会收到警告?

由于

3 个答案:

答案 0 :(得分:14)

您正在从您的界面覆盖某个方法,因此您的实现应与您的规范中的签名相匹配:

public class Bar {
    @Override
    public <T extends Foo> T getBlah() {  
        return this;
    }
}

现在,如果您计划创建整个实现的特定参数化覆盖,那么您需要将泛型类型指定为接口定义的一部分:

public interface Foo<T extends Foo<T>> {
    T getBlah();
}

public class Bar implements Foo<Bar> {
   @Override
   public Bar getBlah() {  
      return this;
   }
}

答案 1 :(得分:4)

<T extends Foo> T getBlah();

表示调用者可以请求任何类型作为要返回的T.所以无论对象是什么类,我都可以请求我选择的其他随机子类返回。这种方法可以有效返回的唯一值是null(除非它做不安全的转换),这可能不是你想要的。

答案 2 :(得分:3)

我不确定你想在这里完成什么,但我认为返回Foo会没问题:

interface Foo {

  public Foo getBlah();

}

因为您没有在参数中的任何位置使用泛型类型。