这个是怎么实现的,我想自己实现接口缺老是报错。

这是Java接口实现的取反操作。

img


我自己实现的取反

img


这里的返回值是复制Java的。
不使用表达式的话是不是这样?

img


可是这样就会报错。。不知道咋回事,如果使用表达按照Java自带写的就不会。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码,似乎您在第二种实现中有一个小错误。在实现 negate() 方法时,您应该返回一个新的 MyDemo 实例,并实现其 test() 方法。而在您的代码中,您在 negate() 方法内部又调用了 this.test() 方法,导致了无限递归和栈溢出错误。

下面是一种正确的实现方式,类似于您的第二种尝试:

public interface MyDemo<T> {
    boolean test(T t);

    default MyDemo<T> negate() {
        return new MyDemo<T>() {
            @Override
            public boolean test(T t) {
                return !MyDemo.this.test(t);
            }
        };
    }
}

这里,我们创建了一个新的 MyDemo 实例,并在其 test() 方法中调用原来的 MyDemo 实例的 test() 方法并取反其返回值。注意,在匿名内部类中使用外部类的实例变量需要使用 外部类.this.变量名 的形式。

返回类型不一样,一个是返回函数式接口,一个是返回的对象