这被认为是内联匿名方法吗?

时间:2010-07-02 16:19:05

标签: java

 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()的主体看起来像内联方法?

这叫什么,我想完全理解这一点。

4 个答案:

答案 0 :(得分:11)

这是一个匿名内部类。您正在创建一个派生自Command类的类,或者仅实现Command接口。在这种情况下,您只是覆盖一种方法,但可以覆盖更多 - 以及有额外的字段等。

Java(目前)没有任何与C#匿名方法完全相同的东西,如果这是您的想法。一个匿名的内部类可能是最接近它的东西。

答案 1 :(得分: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 :(得分:2)

这是一个匿名的内部阶级。 在这种情况下,它很可能是Command接口或抽象类的实现。

答案 3 :(得分:2)

如上所述,这是一个匿名的内部阶级。您经常将此方法视为实现单方法接口的快速方法。

像Groovy和JavaScript这样的语言会使用闭包。