2015-04-21 18 views
5

Tôi đã đọc qua một trong những hướng dẫn biểu thức lambda của Oracle, và đã xem qua đoạn mã sau:Bạn có thể triển khai giao diện trong khi khởi tạo không?

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

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

    System.out.println("=== RunnableTest ==="); 

    // Anonymous Runnable 
    Runnable r1 = new Runnable(){ 

    @Override 
    public void run(){ 
     System.out.println("Hello world one!"); 
    } 
    }; 

    // Lambda Runnable 
    Runnable r2 =() -> System.out.println("Hello world two!"); 

    // Run em! 
    r1.run(); 
    r2.run(); 
    } 
} 

Câu hỏi của tôi là tại sao họ không thực hiện Runnable khi tạo lớp học? Kể từ khi họ overrode phương pháp chạy khi khởi tạo r1, đã làm điều đó chăm sóc thực hiện?

+1

Tôi tin rằng, cảm giác rằng nó nằm trong bối cảnh của một hướng dẫn mà họ đã làm để chứng minh các tùy chọn khác nhau có sẵn cho bạn. – CalebB

Trả lời

2

Có, đây được gọi là lớp ẩn danh trong Java.

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

Bạn có thể thực hiện một giao diện hoặc mở rộng một lớp khi sử dụng new điều hành, mà sẽ tạo ra một thể hiện mới của lớp con giấu tên bạn xác định vào thời điểm đó. Nó chủ yếu được sử dụng khi bạn đang viết mã để được sử dụng trong một chủ đề khác hoặc như một cuộc gọi lại, vì bạn chỉ nhận được một ví dụ.

Cú pháp lambda mới trong Java 8 thay thế các lớp ẩn danh cho các giao diện bằng một phương thức, chẳng hạn như Runnable hoặc các giao diện trong java.util.function. Đây là những gì họ đang chứng minh trong ví dụ.

Các vấn đề liên quan