首页 > 解决方案 > 如何使用默认方法返回功能接口的逆接口

问题描述

我想使用默认方法“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;
    }
}

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

标签: javafunctional-interface

解决方案


由于Relation其当前形式是一个函数式接口,我们可以从中返回一个 lambda,negate()它会反转以下结果test(...)

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

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

Ideone demo


推荐阅读