2010-07-02 25 views
5
public void insert(final String key, final String value) throws Exception { 
    execute(new Command(){ 
     public Void execute(final Keyspace ks) throws Exception { 
     ks.insert(key, createColumnPath(COLUMN_NAME), bytes(value)); 
     return null; 
     } 
    }); 
    } 

Phần thân của Lệnh mới() trông giống như một phương thức nội tuyến?Đây có phải là phương pháp ẩn danh nội tuyến không?

Điều này được gọi là gì, tôi muốn hiểu đầy đủ điều này.

Trả lời

11

Đây là một lớp bên trong vô danh ẩn danh. Bạn đang tạo một lớp học xuất phát từ lớp Command hoặc chỉ thực hiện giao diện Command. Trong trường hợp này, bạn chỉ ghi đè một phương pháp, nhưng bạn có thể ghi đè thêm - cũng như có thêm các trường, v.v.

Java không (hiện tại) có bất kỳ thứ gì tương đương với phương pháp ẩn danh C# , nếu đó là những gì bạn đang nghĩ đến. Một lớp bên trong vô danh có lẽ là điều gần gũi nhất với nó.

+0

"Java không (hiện tại) có bất kỳ thứ gì tương đương với phương pháp ẩn danh C#" hoặc phương thức nặc danh Ruby hoặc phương thức nặc danh Python hoặc phương pháp nặc danh Lisp hoặc phương pháp nặc danh Javascript hoặc ... –

2

đó là lớp bên trong ẩn danh. Trong trường hợp này, rất có thể là việc triển khai giao diện Lệnh hoặc lớp trừu tượng.

5

Đây là số anonymous class.

Command là một giao diện được định nghĩa trước hoặc lớp, vì vậy đây là tương đương với:

public void insert(final String key, final String value) throws Exception { 
    class MyCommand implements Command { // or "extends Command" 
     public Void execute(final Keyspace ks) throws Exception { 
      ks.insert(key, createColumnPath(COLUMN_NAME), bytes(value)); 
      return null; 
     } 
    } 
    execute(new MyCommand()); 
} 
2

Như đã trình bày, nó là một lớp bên trong vô danh. Bạn thường thấy cách tiếp cận này như là một phương tiện nhanh chóng để triển khai thực hiện các giao diện đơn phương pháp.

Các ngôn ngữ như Groovy và JavaScript sử dụng bao đóng cho loại điều này.

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