实现返回泛型类型的接口

时间:2014-04-23 08:34:52

标签: java generics

我看到了这些:

我明白为什么编译器会抱怨。

无论如何,如果我们只使用泛型作为返回值。

public interface Connection 
{
   <T extends Comparable<? super T>> T getVersion();
}

然后这个实现只会发出警告(我使用的是Java 7):

public class IoConnectionStub implements Connection
{
   public String getVersion()
   {
      return "1.0";
   }
}

这有效吗?或者会引起一些问题吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

对于通用方法,调用者可以指定类型参数 - 所以我应该可以使用:

Connection foo = new IoConnectionStub();
Integer x = foo.<Integer>getVersion();

在你的情况下,这显然无法发挥作用。

听起来如果你真的需要这个(我认为对于版本属性来说有些奇怪......)你会想要使界面通用 - 那样IoConnectionStub可以实现Connection<String>例如,您最终得到的代码为:

Connection<String> foo = new IoConnectionStub();
String version = foo.getVersion();

您无法询问 Integer版本号,因为IoConnectionStub无法实现Connection<Integer>