Konstruktoren in inneren Klassen (Implementierung von Interfaces)
Wie würde ich mich über das schreiben eines Konstruktor für eine innere Klasse, die Implementierung einer Schnittstelle? Ich weiß, ich könnte eine ganze neue Klasse, aber ich glaube es gibt doch einen Weg, zu tun, etwas entlang der Linie der diese:
JButton b = new JButton(new AbstractAction() {
public AbstractAction() {
super("This is a button");
}
public void actionPerformed(ActionEvent e) {
System.out.println("button clicked");
}
});
Wenn ich diese eingeben, es erkennt nicht die AbstractAction-Methode als Konstruktor (compiler fragt nach Rückgabetyp). Hat jemand eine Idee?
InformationsquelleAutor der Frage thepandaatemyface | 2010-06-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legen Sie einfach die Parameter nach dem Namen der erweiterten Klasse:
Können Sie auch eine Initialisierung block:
InformationsquelleAutor der Antwort Itay Maman
Wenn Sie wirklich brauchen einen contructor aus welchem Grund auch immer, dann können Sie eine Initialisierung block:
Aber Sie kann nicht rufen Sie ein super-Klasse-Konstruktor von dort. Als Itay sagte aber, Sie kann nur passieren das argument, Sie wollen in den Aufruf von new.
Persönlich, aber ich würde erstellen Sie eine neue innere Klasse:
dann:
InformationsquelleAutor der Antwort DaveJohnston
Die resultierende Klasse ist nicht der Typ
AbstractAction
aber einige (Unbenannt, anonym) - Typ, der erweitert/implementiertAbstractAction
. Dabei wird ein Konstruktor für diese anonyme Klasse benötigen würde, um diese "unbekannten" Namen, aber nichtAbstractAction
.Es ist wie normale Erweiterung/Implementierung: falls Sie definieren eine
class House extends Building
aus und erstellen Sie eineHouse
nennen Sie den KonstruktorHouse
und nichtBuilding
(oderAbstractAction
gerade zu com zurück zu der ursprünglichen Frage).InformationsquelleAutor der Antwort Andreas_D
Den Grund der compiler beschwert sich, weil Sie versuchen, zu deklarieren eines Konstruktors innerhalb Ihres anonymen Klasse, die ist nicht erlaubt, anonyme Klassen zu haben. Wie andere gesagt haben, können Sie entweder dieses Problem durch die Verwendung einer Instanz-Initialisierer oder durch Umwandlung in eine nicht-anonyme Klasse schreiben Sie einen Konstruktor für es.
InformationsquelleAutor der Antwort programmar