如何在java中为两个或多个匿名函数编写lambda表达式?

Pra*_*kam 1 java java-8

假设我有接口A,它只有一个声明如下的方法:

interface A{        
    void print();           
}
Run Code Online (Sandbox Code Playgroud)

现在使用旧的java风格,我们将以匿名的方式使用它,如下所示:

new A() {           
        @Override
        public void print() {
            System.out.println("in a print method");                
        }           
};
Run Code Online (Sandbox Code Playgroud)

并使用lambda表达式,我们将使用它如下:

() -> "A1";
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果接口A有两个声明如下的方法:

interface A{        
   void print();    
   void display();          
}
Run Code Online (Sandbox Code Playgroud)

它以前的匿名函数利用方式如下:

  new A() {         
        @Override
        public void print() {
            System.out.println("in print");

        }

        @Override
        public void display() {
            System.out.println("in display");

        }       

    };
Run Code Online (Sandbox Code Playgroud)

现在如何将显示方法转换为lambda?或者我们不被允许这样做; 如果不是为什么不呢?为什么我们不能代表它

print() - >"打印"

display() - >"显示"

Ian*_*rts 8

你不能.lambda表达式只能用于"功能"接口 - 只有一个非默认方法的接口.

对于"为什么"你必须要求语言设计者,但我的看法是lambda表达式是单个代码块的简写,而作为一个单元处理的一组相关块将更好地表示为一个正确的类.对于喜欢在问题的例子的情况下,真正的答案将修改API,而不是使用一个单一的,这样A它使用两个单独的功能接口为两个功能两种方法的接口APrinterADisplayer,这可能再由独立的lambda表达式来实现.