Считается ли это встроенным анонимным методом? - PullRequest
5 голосов
/ 02 июля 2010
 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;
      }
    });
  }

Тело new Command () выглядит как встроенный метод?

Как это называется, я хочу полностью понять это.

Ответы [ 4 ]

11 голосов
/ 02 июля 2010

Это анонимный внутренний класс .Вы создаете класс, который наследуется от класса Command или просто реализует интерфейс Command.В этом случае вы переопределяете только один метод, но вы можете переопределить больше, а также иметь дополнительные поля и т. Д.

В Java (в настоящее время) нет ничего, что вполнеэквивалент анонимного метода C #, если вы об этом и думаете.Хотя анонимный внутренний класс, вероятно, ближе всего к нему.

5 голосов
/ 02 июля 2010

Это анонимный класс .

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 голосов
/ 02 июля 2010

Как уже говорилось, это анонимный внутренний класс. Чаще всего этот подход рассматривается как быстрое средство для реализации одно-методических интерфейсов.

Такие языки, как Groovy и JavaScript, используют замыкания для такого рода вещей.

2 голосов
/ 02 июля 2010

это анонимный внутренний класс.В этом случае это, скорее всего, реализация интерфейса Command или абстрактного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...