2010-07-02 57 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等语言使用闭包来处理这类事情。