Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java谓词接口-方法的工作方式-尽管它没有在我的类中实现_Java_Interface_Predicate - Fatal编程技术网

Java谓词接口-方法的工作方式-尽管它没有在我的类中实现

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

虽然我还没有实现谓词接口中的方法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.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;
    }
}