Java谓词接口-方法的工作方式-尽管它没有在我的类中实现
虽然我还没有实现谓词接口中的方法test,但是为什么在我的类inte中没有任何主体的情况下执行该方法呢Java谓词接口-方法的工作方式-尽管它没有在我的类中实现,java,interface,predicate,Java,Interface,Predicate,虽然我还没有实现谓词接口中的方法test,但是为什么在我的类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.pr
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);
}
packagenewone;
导入java.util.function.Predicate;
公共类inte{
公共静态void main(字符串[]args){
谓词p=i->(i)
虽然我还没有实现方法测试
使用lambda表达式,您有:
Predicate p=i->(i较新的编译器1,从版本8开始(我相信),在代码中添加一个(合成)方法,主要如下所示:
公共类接口{
公共静态void main(字符串[]args){
谓词p=Inte::lambda$test$1;
...
}
//合成的
私有静态布尔lambda$test$1(整数i){
返回i<19;
}
}
1-或者,在Java版本8之前,可以添加一个实现接口的附加类(类似于匿名类)这只是匿名内部类的语法糖。p是谓词。test()类似于accept()总之,如果我知道为什么会给出负面评价,这对我会有帮助。作为一名学习者,我正在学习基础知识。谢谢,这让我很困惑!这也解决了我关于匿名类和函数接口的许多其他问题。我特别说“字节码中的确切细节有点不同”-使用匿名类是为了更容易理解它是如何实现接口的。我建议这个答案只是将问题从“lambda表达式如何实现接口”转移到“方法引用如何实现接口”。(我在答案的末尾添加了更多的细节。)@Jon我不想与你竞争,对不起(更改或删除这个答案对你来说应该没有任何问题——即使它没有标记为社区维基)没问题——我也很抱歉过于防御。
public class Inte {
public static void main(String[] args) {
Predicate<Integer> p = Inte::lambda$test$1;
...
}
// synthetic
private static boolean lambda$test$1(Integer i) {
return i < 19;
}
}