Java通用接口返回类型

cpl*_*rat 2 java generics design-patterns interface

从C++迁移到Java.

我有一个第三方代码,我需要实现一个类似于此的接口.

public interface Foo<T>{
       public T doSomething();
}
Run Code Online (Sandbox Code Playgroud)

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

public class A extends Z{...};
public class B extends Z{...};
public class C extends Z{...};
Run Code Online (Sandbox Code Playgroud)

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

public class ARet implements Foo<A>{...}
public class BRet implements Foo<B>{...}
public class CRet implements Foo<C>{...}
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 6

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

public class Ret<T extends Z> implements Foo<T>{...}
Run Code Online (Sandbox Code Playgroud)