Java 谓词接口 - 该方法是如何工作的 - 虽然它没有在我的 class 中实现
Java Predicate Interface - How the method is working - Though it is not implemented in my class
虽然我没有实现 Predicate 接口中的方法 - test - 为什么在我的 class - inte 中没有任何主体执行该方法??
package newone;
import java.util.function.Predicate;
public class inte {
public static void main(String[] args) {
Predicate <Integer> p = i -> (i<19);
System.out.println( p.test(22));
}
@FunctionalInterface
public interface Predicate<T> {
boolean test(T var1);
}
Though I have not implemented the method - test
你有,使用 lambda 表达式:
Predicate <Integer> p = i -> (i<19);
那是最像:
Predicate<Integer> p = new Predicate<Integer>() {
@Override
public boolean test(Integer i) {
return i < 19;
}
};
字节码中的确切细节略有不同,但在大多数情况下,您可以将 lambda 表达式视为 shorthand,用于创建匿名内部 class。编译器能够执行其他技巧来避免在现实中创建额外的 classes,至少在某些情况下 - 这取决于您的 lambda 表达式的作用。
较新的编译器1,从第 8 版开始(我相信),向代码中添加一个(合成的)方法,最像 :
public class Inte {
public static void main(String[] args) {
Predicate<Integer> p = Inte::lambda$test;
...
}
// synthetic
private static boolean lambda$test(Integer i) {
return i < 19;
}
}
1 - 或者,在 Java 版本 8 之前,可以添加额外的 class 实现接口(比如匿名 class)
虽然我没有实现 Predicate 接口中的方法 - test - 为什么在我的 class - inte 中没有任何主体执行该方法??
package newone;
import java.util.function.Predicate;
public class inte {
public static void main(String[] args) {
Predicate <Integer> p = i -> (i<19);
System.out.println( p.test(22));
}
@FunctionalInterface
public interface Predicate<T> {
boolean test(T var1);
}
Though I have not implemented the method - test
你有,使用 lambda 表达式:
Predicate <Integer> p = i -> (i<19);
那是最像:
Predicate<Integer> p = new Predicate<Integer>() {
@Override
public boolean test(Integer i) {
return i < 19;
}
};
字节码中的确切细节略有不同,但在大多数情况下,您可以将 lambda 表达式视为 shorthand,用于创建匿名内部 class。编译器能够执行其他技巧来避免在现实中创建额外的 classes,至少在某些情况下 - 这取决于您的 lambda 表达式的作用。
较新的编译器1,从第 8 版开始(我相信),向代码中添加一个(合成的)方法,最像 :
public class Inte {
public static void main(String[] args) {
Predicate<Integer> p = Inte::lambda$test;
...
}
// synthetic
private static boolean lambda$test(Integer i) {
return i < 19;
}
}
1 - 或者,在 Java 版本 8 之前,可以添加额外的 class 实现接口(比如匿名 class)