这是Java接口实现的取反操作。
我自己实现的取反
这里的返回值是复制Java的。
不使用表达式的话是不是这样?
可是这样就会报错。。不知道咋回事,如果使用表达按照Java自带写的就不会。
这是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.变量名 的形式。