首页 > 解决方案 > 如何在 java 中使用接受扩展接口类型的参数的函数创建接口?

问题描述

如何在 java 中使用接受扩展接口类型的参数的函数创建接口?

以接口 ISelfComparable 为例

如果 A 类扩展它,那么我希望它能够实现

bool compareTo(A other)

但如果 B 类扩展它,那么我希望它能够实现

bool compareTo(B other)

我知道我可以使用通用接口,但它似乎不正确,因为 A 扩展 ISelfComparable<B> 没有任何意义

如果这是不可能的,那么在这种情况下最好的做法是什么?

标签: javainterface

解决方案


通常的解决方案是自界泛型,如在Enum课堂上所见。

interface Example<T extends Example<T>> {
    void foo(T t);
}

public class ExampleImpl implements Example<ExampleImpl> {
    @Override
    public void foo(ExampleImpl example) {
    }
}

它的工作原理有点令人眼花缭乱,但例如在这里解释得很好。这里也有关于这个主题的非常好的答案。

请注意,它并非万无一失,因为它允许这样做:

public class ExampleImpl2 extends Example<ExampleImpl {
    @Override
    public void foo(ExampleImpl example) {

    }
}

但在实践中,自界成语用于准确表达您所追求的东西。

如果您真的,真的,真的需要参数对象总是与 完全相同的类this,您必须进行运行时检查。(它也提出了你为什么需要这个的问题,但这会让我们偏离主题。)


推荐阅读