sách gpt4 ai đã đi

Biểu thức lambda - Sử dụng biểu thức lambda

In lại 作者:行者123 更新时间:2023-12-01 16:43:32 29 4
mua khóa gpt4 Nike

我开始学习 lambda 表达式,并在以下情况下遇到了以下语句:

interface MyNumber {
double getValue();
}

MyNumber number;

number = () -> 123.54;

当将表达式分配给 myNum 变量时,将创建一个类实例,其中 lambda 表达式重写 MyNumber 接口(interface)的 getValue () 方法并定义其实现。

我不明白这种情况。该类的实例是如何创建的以及用于什么目的?这可能是一个愚蠢的问题,但是......如果给定的功能接口(interface)由多个类实现,那么将创建哪个实例类?我会寻求帮助,因为我完全不明白。

1 Câu trả lời

When the expression is assigned to the myNum variable, a class instance is created in which the lambda expression overrides the getValue () method of the MyNumber interface and defines its implementation.

不,那是不正确的。 lambda 是编译器根据需要引用的“一段代码”。这是效率方面的主要优势之一,JVM 在执行程序时不必创建和加载类。

您应该在发布问题之前测试您的示例,因为它是不正确的。 MyNumber接口(interface)不是作为数据类型而是作为方法定义。应该是:

interface MyNumberSupplier {
double getValue();
}

MyNumberSupplier numberSupplier = () -> 123.45;
double d1 = numberSupplier.getValue();

在这里你可以看到lambda表达式是一段代码,它返回用于设置d1的值。 。在本例中,代码返回文字值 123.45当需要设置 d1 时,编译器只需引用该代码来代替 numberSupplier.getValue();线。您可以扩展示例以使用更复杂的代码:

MyNumberSupplier getLess100 = () -> Math.random() * 100.0;
MyNumberSupplier getMore100 = () -> Math.random() * 100.0 + 100.0;
double d1;
if ( Math.random() < 0.5)
d1 = getLess100.getValue();
khác
d1 = getMore100.getValue();

这里接口(interface)以两种不同的方式实现,但没有定义任何类(MyNumberSupplier 接口(interface)除外),仅定义了根据需要引用的代码片段。一个@FunctionalInterface由于 lambda 表达式只能是一段代码,因此只能有一种方法。

最后,需要注意的是,java 8 中包含的 java.util.function 包中有很多预定义的接口(interface)。例如 java.util.function.Supplier 。然后你的代码可以写成:

Supplier myNumber= () -> 123.45;
double d1 = myNumber.get();

关于java - Lambda 表达式 - 使用 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797824/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com