2012-04-05 6 views
1

Ich habe eine Oberklasse mit einer eigenen geschachtelten Klasse, die im Konstruktor übergeben wird (/ als Provider injiziert).Construct superclass Provider von der Unterklasse des Providers

Ähnlich habe ich eine Unterklasse mit einer eigenen geschachtelten Klasse, die (als Provider) in den Konstruktor injiziert wird. Subclass.NestedClass erweitert Superclass.NestedClass.

public class SuperClass { 
    @Inject SuperClass(Provider<SuperClass.Parameters> superParam) { 
    } 

    public class Parameters { 
    int a; 
    } 
} 

public class Sub extends SuperClass { 
    @Inject Sub(Provider<Sub.Parameters> subParam) { 
    // Need to call super here with the appropriate superclass's provider 
    } 

    public class Parameters extends SuperClass.Parameters { 
    int b; 
    } 
} 

Gibt es eine Weise, die ich den Anbieter von Sub.Parameters zu SuperClass.Parameters des Anbieters umwandeln kann, so dass ich Super (mit diesem Provider) im Konstruktor von Sub aufrufen können.

+0

Ich habe es selbst herausgefunden. Der Konstruktor der Superklasse liest nun @Inject SuperClass (Provider . "? Extends" löste mein Problem. – Bajji

+0

Bitte fügen Sie es als Antwort hinzu und markieren Sie es gelöst. Es ist völlig legal, Ihre eigenen Fragen zu beantworten und es wird helfen die anderen. Danke! – janhink

+0

@eQui fertig. Danke! – Bajji

Antwort

0

Java-Generika halfen mir hier.

Lösung:

public class SuperClass { 
    // Constructor 
    @Inject SuperClass(Provider<? extends SuperClass.Parameters> superParam) { 
    } 

    public class Parameters { 
    int a; 
    } 
} 

public class Sub extends SuperClass { 
    @Inject Sub(Provider<Sub.Parameters> subParam) { 
    super(subParam); 
    } 

    public class Parameters extends SuperClass.Parameters { 
    int b; 
    } 
} 

Beachten Sie den Unterschied in der Super-Klasse-Konstruktor Parameter "erweitert?".

Verwandte Themen