Java通用接口返回类型

时间:2016-12-15 20:04:51

标签: java generics design-patterns interface

从C ++迁移到Java。

我有一个第三方代码,其中包含我需要实现的接口,类似于此。

public interface Foo<T>{
       public T doSomething();
}

我想实现这个接口,以便我可以调用doSomething()并获得3个不同的类A, B and C,这些类扩展了一个公共基础Z,如下所示。

public class A extends Z{...};
public class B extends Z{...};
public class C extends Z{...};

我找不到任何避免编写以下3个类的方法。

public class ARet implements Foo<A>{...}
public class BRet implements Foo<B>{...}
public class CRet implements Foo<C>{...}

对于给定的接口Foo,是否无法编写一个返回T extends Z看似public class Ret implements Foo<T extends Z>{...}的实现的实现。这似乎不起作用。有没有办法避免这三个类或没有办法绕过它?

1 个答案:

答案 0 :(得分:6)

如果希望接口的实现是通用的,则需要将T声明为Ret的泛型类型参数:

public class Ret<T extends Z> implements Foo<T>{...}