如何使用默认方法返回功能接口的逆接口

问题描述

我想使用默认方法“ negate()”返回“关系”,该方法总是返回方法test()的反面。我该怎么办?

public interface Relation<X,Y> {

    boolean test(X x,Y y);

    default Relation<X,Y> negate() {
        // TODO
        Relation<X,Y> relation = new Relation<X,Y>() {

            public boolean test(X x,Y y) {
                return !this.test(x,y);
            }
            
        };
        return relation;
    }
}

我尝试了这段代码,但是它给了我堆栈溢出错误

解决方法

由于Relation的当前形式是一个功能接口,因此我们可以从negate()返回一个lambda来反转test(...)的结果:

public interface Relation<X,Y> {
    ...

    default Relation<X,Y> negate() {
        return (x,y) -> !this.test(x,y);
    }
    ...
}

Ideone demo

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...