2010-07-02 60 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; 
     } 
    }); 
    } 

新的Command()的主體看起來像一個內聯方法?這是否被認爲是內聯匿名方法?

這是什麼叫,我想完全理解這一點。

回答

11

這是一個匿名內部類。您正在創建一個派生自Command類的類或只是實現了Command接口。在這種情況下,你只覆蓋一個方法,但你可以覆蓋更多 - 以及具有額外的字段等等

Java不(目前)有什麼這是一個C#匿名方法的相當相當的,如果這就是你的想法。一個匿名的內部類可能是最接近它的。

+0

「Java沒有(當前)有任何與C#匿名方法相當的東西」,或者Ruby匿名方法或Python匿名方法或Lisp匿名方法或Javascript匿名方法或...... – 2010-07-15 18:54:34

2

這是一個匿名的內部類。 在這種情況下,它很可能是Command接口或抽象類的實現。

5

這是一個anonymous class

Command是預先定義的接口或類,那麼這相當於:

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

如上所述,它是一個匿名內部類。您經常將這種方法看作是實現單一方法接口的快速手段。

Groovy和JavaScript等語言使用閉包來處理這類事情。

相關問題