重写 returns 并使用通用 class 和 sub-interfaces 的方法

Overriding method that returns and consumes a generic class with sub-interfaces

我想制作一个通用接口,它有两个抽象方法,其中一个 returns 并使用相同通用接口类型的 sub-type。

我想要实现的目标是创建 @FunctionalInterfaces 具有相同的 parent,但不同的组合方式。

我的第一个方法如下,

public interface ParentFunction<T, C extends ParentFunction> {

  void doSomething(T t);

  C<T> compose(C<T> other);
}

@FunctionalInterface
public interface SonFunction<T> extends ParentFunction<T, SonFunction> {

  @Override
  default SonFunction<T> compose(SonFunction<T> other){
    return null;
  }
}

@FunctionalInterface
public interface SonFunction<T> extends ParentFunction<T, SonFunction> {

  @Override
  default DaughterFunction<T> compose(SonFunction<T> other){
    return null;
  }
}

但是编译错误发生在 parent 方法的 C<T> 说 'Type "C" does not have type parameters,' 和另一个 child 默认方法的 @Override

我可以在不扩展的情况下分离我的 child 接口,但我希望它们有一个客户端代码只知道的 super-type。

有什么很酷的技巧可以实现吗?

在Java中,你不能做C<T>,但是,你可以要求C扩展ParentFunction<T,C>

同样适用于您的 SonFunctionDaughterFunction

试试这个:

public interface ParentFunction<T, C extends ParentFunction<T, C>> {
    void doSomething(T t);
    C compose(C other);
}

@FunctionalInterface
public interface SonFunction<T> extends ParentFunction<T, SonFunction<T>> {

    @Override
    default SonFunction<T> compose(SonFunction<T> other){
        return null;
    }
}

@FunctionalInterface
public interface DaughterFunction<T> extends ParentFunction<T, DaughterFunction<T>> {

    @Override
    default DaughterFunction<T> compose(DaughterFunction<T> other){
        return null;
    }
}