这是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.变量名 的形式。
返回类型不一样,一个是返回函数式接口,一个是返回的对象