2017-05-12 3 views
1

Ich habe eine Anforderung in Java, um eine innere Klasse zu erstellen und diese innere Klasse auch implementieren eine "optionale" Marker-Schnittstelle.Wie können Sie eine innere Klasse instanziieren UND eine zusätzliche Schnittstelle implementieren

z.B. Was ich gerne tun könnte, ist schreiben

final Object obj1 = new Adapter() implements MarkerInterface { 
    @Override 
    public void adapterMethod() { 

    } 
}; 

final Object obj2 = new Adapter() { 
    @Override 
    public void adapterMethod() { 

    } 
}; 

Ich realisiere das oben nicht kompilieren.

Welchen Ansatz kann ich wählen, um das gewünschte Ergebnis zu erzielen?

+2

Haben Sie darüber nachgedacht, eine Anmerkung anstelle einer Markierungsschnittstelle zu verwenden? – khelwood

+2

@khelwood: Ausgezeichnetes Denken im linken Feld für dieses spezifische Szenario ... –

+1

[Tutorials für verschachtelte Klassen] (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) kann helfen, Ihr Problem zu lösen . – Roland

Antwort

4

Machen Sie es nicht anonym:

private [static] class MyAdapter extends Adapter implements MarkerInterface { 
    ... 
} 

... 

MyAdapter a = new MyAdapter(); 

Sie können sogar Nest diese Klassendeklaration in Ihrer Methode, wenn Sie wirklich wollen.

+1

* "Sie können diese Klassendeklaration sogar innerhalb Ihrer Methode verschachteln, wenn Sie das wirklich wollen." * Ich tendiere dazu, das zu vergessen, was wahrscheinlich (im Großen und Ganzen) eine gute Sache ist. :-) Aber * manchmal * müsste man es wohl machen ... –

+2

Ja, ich kann mich an kein einziges Mal erinnern, wo ich dachte, es wäre eine gute Idee. –

+0

Ich würde 'Adapter a = new MyAdapter();' – toongeorges

Verwandte Themen