功能接口:使用Java中的接口的一种简单方法。
#教程 #lambda #java #interfaces

功能接口

功能接口是只有一个抽象方法的简单接口。那么,要使用的大事是用于实施其行为,而无需为其创建另一个类,甚至需要匿名类,这可以减少代码的行数并使其更容易阅读。

每个接口都只有一个抽象方法是一个功能接口。但是,在接口声明中使用@FunctionalInterface注释是一个好习惯,因为那个使Java编译器会引发错误,以防注释的接口具有多个抽象方法,或者如果其类型不是interface

使用该类型的实现的另一个间接优势是支持具有并行操作的流,可以改善我们的软件性能。

使用示例。

让我们创建一个简单的示例。如前所述,如果接口只有一个抽象方法,则可以是功能接口。牢记它,接口MyFuncionalInterface具有以下代码:

@FunctionalInterface // Makes the compiler throws an error.
interface MyFuncionalInterface {
    public double calculate(double num1, double num2);
}

要实现该calculate方法,我们可以创建一个新类或使用匿名类,例如通常。但是,由于它是一个功能接口,因此我们可以使用lambdas实现该方法。

以下代码片段显示了两个实现:使用匿名类和使用lambdas。

class Application {
    public static void main(String args[]) {

        double num1 = Double.valueOf(args[0]);
        double num2 = Double.valueOf(args[1]);

        // Implementation with anonymous class.
        MyFuncionalInterface calcWithAnonymousClass = new MyFuncionalInterface() {
            @Override
            public double calculate(double num1, double num2) {
                return num1 + num2;
            }
        };

        // Implementation with lambda.
        MyFuncionalInterface calcWithLamba = (parameter1, parameter2) -> parameter1 + parameter2;

        double resultWithAnonymousClass = calcWithAnonymousClass.calculate(num1, num2);
        double resultWithLambda = calcWithLamba.calculate(num1, num2);

        System.out.println("The sum between " + num1 + " and " + num2 + " is:");
        System.out.println("Anonymous Class: " + resultWithAnonymousClass);
        System.out.println("Lamba: " + resultWithLambda);
    }
}

对于运行该代码,我们可以在Application.java文件的位置使用以下命令。

javac Application.java; java Application 1 1

运行后,在终端显示的结果为:

The sum between 1.0 and 1.0 is:
Anonymous Class: 2.0
Lamba: 2.0

请注意,对calcWithAnonymousClass的实现需要更多的行才能制作与calcWithLamba相同的东西。使用功能接口和lambdas是很大的一面:更少的代码和更多的可读性。

当然,在我们的日常生活中,由于许多原因,许多班级都无法以功能的方式实施:旧版代码,依赖性甚至缺乏知识。该资源非常有用,但是在正确的位置。

感谢您的阅读,任何建议都是有效的,请让您的反馈;)。

您可以在GitHub

上检查代码

参考

该帖子基于Vogella's introduction about JavaMarcelo Carvalho post on MediumOracle DocumentationPankaj post on Digital Ocean