2016-10-28 3 views
-1

ich eine Java-Klasse, die wie folgt aussieht:Java-Konstruktor mit Schlüsselwort extends

public class thisThing { 

    private final Class<? extends anInterface> member; 

    public thisThing(Class<? extends anInterface> member) { 
     this.member = member; 
    } 
} 

Meine Frage ist: Wie rufe ich den thisThing Constructor?

+0

ich Ihre Frage möglicherweise nicht verstehen, aber Sie brauchen nicht einfach neue thisThing() aufzurufen und Als Argument ein beliebiges Objekt übergeben, das einInterface implementiert? – facundop

+1

Lernen Sie die Java-Coding-Standards: sollte ThisThing sein – duffymo

+1

Sie übergeben es einfach eine Klasse, die die Schnittstelle implementiert ... – Li357

Antwort

3

Um den Konstruktor von thisThing Sie eine Klasse definieren müssen aufrufen, die anInterface zuerst implementiert:

class ClassForThisThing implements anInterface { 
    ... // interface methods go here 
} 

Jetzt können Sie thisThing instanziiert wie folgt:

thisThing theThing = new thisThing(ClassForThisThing.class); 

Die Idee hinter solchen instantiations gibt normalerweise thisThing eine Klasse, von der es Instanzen von anInterface durch Reflexion erstellen konnte. Compiler stellt sicher, dass die Klasse, die Sie an den Konstruktor ist kompatibel mit anInterface, um sicherzustellen, dass wirft ähnliche

anInterface memberInstance = (anInterface)member.newInstance(); 

würde immer zur Laufzeit erfolgreich zu sein.

1

Ich möchte nicht, was Sie getan haben.

Warum nicht das? Keine Notwendigkeit für Generika hier. Du machst gerade Komposition. Übergeben Sie eine Referenz, die AnInterface implementiert. Das Liskov-Substitutionsprinzip sagt, dass alles gut funktioniert.

public class ThisThing { 

    private AnInterface member; 

    public ThisThing(AnInterface member) { 
     this.member = member; 
    } 
} 

Hier ist die Schnittstelle:

public interface AnInterface { 
    void doSomething(); 
} 

Hier ist eine Implementierung:

public class Demo implements AnInterface { 
    public void doSomething() { System.out.println("Did it"); } 
} 
+0

Der Punkt ist, dass ich es nicht getan habe, bin ich fest damit! – NWS

+0

Sie haben was nicht gemacht? Implementieren Sie die Schnittstelle? – duffymo

+0

Definiert thisThing ... wird geliefert wie es ist. – NWS

Verwandte Themen