2010-07-01 6 views
2

je dois mettre en œuvre un auditeur en JavaScript par sous-classe anonyme d'une classe de base abstraite existante, définie comme ceci:mise en œuvre Anonyme des classes abstraites dans Rhino

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); 
    } 
} 

En Java, la mise en œuvre d'un auditeur se fait avec les sous-classes anonymes :

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

Si je tente de le faire en JavaScript, je ne peux pas appeler le constructeur de la classe de base abstraite et mettre en œuvre la fonction virtuelle en même temps.

Il fonctionne si je retire l'argument du constructeur, puis un appel à MyListener() avec la mise en œuvre de la méthode en tant que paramètre crée une instance de la sous-classe j'ai besoin. Mais je dois en fait appeler le constructeur avec à la fois le constructeur du paramètre et la mise en œuvre de la méthode.

+0

Il n'est pas clair pour moi comment vous essayez d'impliquer Javascript dans ce problème. Pouvez-vous donner un exemple de ce que vous avez essayé qui * ne fonctionne pas? – Pointy

+0

J'ai une application scriptable écrite en Java. Je peux utiliser la console JS pour certaines opérations (en appelant les méthodes des classes de mon application). Je veux écrire un script pour gérer certains événements de cette application, mais pour ce faire, j'ai besoin d'implémenter un écouteur. Ce qui ne fonctionne pas: Je ne peux pas écrire "x = Speaker.MyListener (" George ", function (words) {sleep();})" dans Rhino: la console JS obtient une InvocationTargetException et se ferme. –

Répondre