Анонимная реализация абстрактных классов в Rhino - PullRequest
2 голосов
/ 01 июля 2010

Мне нужно реализовать слушатель в JavaScript с помощью анонимного подкласса существующего абстрактного базового класса, определенного следующим образом:

public class Speaker {
  public static abstract class MyListener {
    private String name;
    public MyListener(final String name) { this.name = name; }
    public abstract boolean listen(final String words);
  }
}

В Java реализация слушателя выполняется с помощью анонимных подклассов:

MyListener newListener = new MyListener("George") {
  public boolean listen(final String words) throws Exception { Thread.sleep(500); }
}

Если я попытаюсь сделать это в JavaScript, я не смогу вызвать конструктор абстрактного базового класса и одновременно реализовать виртуальную функцию.

Это сработает, если я уберу аргумент конструктора, затем вызов MyListener () с реализацией метода в качестве параметра создает экземпляр нужного мне подкласса.Но на самом деле мне нужно вызвать конструктор с и параметром конструктора и реализацией метода.

1 Ответ

2 голосов
/ 21 сентября 2010

Может быть, это поможет:

http://download.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsimplement

Речь идет о реализации интерфейсов, но может быть применима.

...