fre*_*low 73 java syntax obfuscation lambda java-8
我最近发现了以下代码:
IntPredicate neg = x -> x <- x;
Run Code Online (Sandbox Code Playgroud)
这是什么,某种反向双lambda?
tob*_*s_k 90
没有-> <-操作员.第一个->是lambda语法,如Java 8中所介绍的那样,第二个<-是'小于' <和'一元减号' 的误导性连接-.
您可以将其读作IntPredicate neg = (x) -> (x < (-x));,即它测试是否x小于-x,所有(好的,大多数)负数的情况,因此名称neg.
IntPredicate neg = x -> x <- x;
System.out.println(neg.test(4)); // false
System.out.println(neg.test(0)); // false
System.out.println(neg.test(-4)); // true
Run Code Online (Sandbox Code Playgroud)
只是为了完整性:这个测试不仅(故意?)难以理解,而且 - 正如评论中指出的那样 - 它也失败了Integer.MIN_VALUE(这是==-Integer.MIN_VALUE).相反,你应该只使用更简单的方法IntPredicate neg = x -> (x < 0);.