- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始学习 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/
Tôi đang viết một máy tính đơn giản sử dụng yacc/bison. Cú pháp của một biểu thức trông giống như thế này: expr : NUM | expr '+' expr { $$ = $1 + $3; } | expr '-'
Tôi bắt đầu học biểu thức lambda và bắt gặp câu lệnh sau: interface MyNumber { double getValue(); } MyNumber number; nu
Sự khác biệt giữa hai truy vấn Linq này là gì: var result = ResultLists().Where( c=> c.code == "abc").FirstOrDefault(); // so với var
Nếu chúng ta xem bản thảo tiêu chuẩn C++ 5.1.2 Biểu thức Lambda phần 2 có ghi (tôi nhấn mạnh): Đánh giá biểu thức lambda
Tôi đang sử dụng Mule 4.2.2 runtime, studio 7.5.1 và Oracle JDK 1.8.0_251. Tôi sử dụng biểu thức Lambda trong mã Java, được gọi bởi Java Invoke
Tôi mới làm quen với XPath. Tôi có nguồn html của một trang web http://london.craigslist.co.uk/com/1233708939.html Bây giờ tôi muốn trích xuất dữ liệu sau từ trang trên Ngày đầy đủ E
Đã đóng. Câu hỏi này không liên quan tới chủ đề. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Cập nhật câu hỏi để phù hợp với chủ đề trên Stack Overflow. Đã đóng cửa 10 năm trước. Cải thiện th
Tôi có thể viết biểu thức Cron để kích hoạt vào lúc 8 giờ sáng và 3 giờ 30 chiều hàng ngày như thế nào? Tôi hiểu cách tạo ra một biểu cảm kích hoạt một lần mỗi ngày, nhưng không kích hoạt ở nhiều thời điểm cố định. Cảm ơn trước vì câu trả lời hay nhất. Bạn chỉ nên sử dụng hai dòng thôi. 0 8 * * *
Câu hỏi này đã có câu trả lời: 3 dấu chấm bên cạnh kiểu tham số có nghĩa là gì trong Java? (9 câu trả lời) varargs và đối số '...'
Tôi mới làm quen với Python và khi đọc hướng dẫn BeautifulSoup, tôi không hiểu biểu thức này "[x for x in titles if x.findChildren()][:-1]" Tôi không hiểu? Bạn có thể giải thích được không?
(?:) là một biểu thức chính quy ruby hợp lệ, ai đó có thể cho tôi biết nó có nghĩa là gì không? Cảm ơn câu trả lời hay nhất. Như những người khác đã nói, nó được sử dụng như cú pháp không bắt giữ cho các biểu thức chính quy, tuy nhiên, nó cũng là cú pháp ruby hợp lệ bên ngoài các biểu thức chính quy. hiện hữu
Câu hỏi này đã có câu trả lời tại đây: Tại sao ++[[]][+[]]+[+[]] trả về chuỗi "10"? (10 câu trả lời) Đã đóng 8 năm trước. Có ai có thể giúp tôi với JavaSc này không?
Câu hỏi này đã có câu trả lời ở đây: Toán tử "-->" trong C++ là gì? (29 câu trả lời) Java: Tiền tố/hậu tố của phép tăng/giảm
Câu hỏi này đã có câu trả lời tại đây: List understanding vs. lambda + filter (16 câu trả lời) Đã đóng 10 tháng trước. Tôi không chắc mình cần lambda hay thứ gì khác. Nhưng,
Với tôi, cách thức hoạt động của hàm assert() trong C giống như một khu rừng tối tăm. Theo câu trả lời tại đây https://stackoverflow.com/a/1571360 bạn có thể sử dụng cấu trúc sau để đưa ra thông báo tùy chỉnh cho khẳng định của mình
Trên trang này, John Barnes viết: Nếu biểu thức điều kiện là đối số của chuyển đổi kiểu thì có hiệu lực
Tôi phải tạo một lịch trình chạy trong 2 ngày (thứ năm và thứ sáu) mỗi tuần từ 9 giờ sáng ngày đầu tiên đến 11:59 tối ngày thứ hai. Để thực hiện việc này, tôi cần cung cấp biểu thức cron. 0-0 0-0 9-23 ? * THU
Tôi đang cố gắng viết một biểu thức Linq để kiểm tra các thuộc tính trong một lớp dẫn xuất, nhưng danh sách bao gồm các thành viên từ lớp cơ sở. Mã mẫu bên dưới. Dòng thứ hai của phương thức Process bắt đầu bằng "var list" không biên dịch được, nhưng tôi không chắc mình nên sử dụng cú pháp nào để
Biểu thức sed này chuyển đổi một chuỗi đầu vào thành một chuỗi đầu ra gồm hai dòng. Mỗi dòng đầu ra bao gồm một chuỗi con của chuỗi đầu vào. Dòng đầu tiên cần được chuyển đổi thành chữ hoa: s:random_stuff\(choice1\|choice2\){\([^}]*
Tôi đang sử dụng Quartz.Net để lên lịch công việc trong ứng dụng của mình. Tôi chỉ muốn biết liệu có thể xây dựng biểu thức CRON cho tình huống sau hay không: Mỗi giây giữa 2:15 sáng và 5:20 sáng
Tôi là một lập trình viên xuất sắc, rất giỏi!