Compiler-Fehler Google Guice Module zur Laufzeit zusammenstellen und binden

L

lam_tr

Top Contributor
Hallo zusammen,

ich habe vor meine Services in verschiedene XML Dateien zu definieren mit jeweil Interfaceklasse und Implementierungsklasse und zur Laufzeit der Anwendung die Klassen im Guice Module initialisieren und mit der Implementierungsklasse binden.

Code:
for(Service object : services){
DIPlatform.add(new AbstractModule() {
            @Override
            protected void configure() {
                try {
                    Class<?> interfaceClass = Class.forName(object.getUriInterface());
                    Class<? extends interfaceClass> implementationClass = Class.forName(object.getUriImplementation());
                    bind(interfaceClass).to(implementationClass).asEagerSingleton();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        });
}

1. Frage bezieht sich eher auf Generics, wie kann ich die implementaionClass über ClassLoader von InterfaceClass erben lassen? Wenn ich den oben genannten Code in Eclipse darstelle bekomme ich bei
Code:
bind(interfaceClass).to(implementationClass).asEagerSingleton();
Compile Error. Natürlich weil die Implementierungsklasse die InterfaceKlasse nicht kennt.

2. Würde es so gehen oder kennt ihr da bessere Wege es zu machen?

Viele Grüße
lam
 
H

httpdigest

Top Contributor
Erstmal hast du einen Compilefehler, weil Upper Bounds in parametrisierten Typen nicht Variablen sein können.
Desweiteren kannst du einen Typparameter in einer Methode einführen, der die Verbindung zwischen dem Interface und der Implementierungsklasse ausdrückt. Ausserdem, du ja zur Laufzeit nicht statisch den Typ prüfen kannst, brauchst du explizite Casts, die entsprechend unsicher sind, also eine Warnung generieren werden:
Java:
new AbstractModule() {
  @Override
  protected void configure() {
    try {
      bindInterfaceToImpl();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  @SuppressWarnings("unchecked")
  private <T> void bindInterfaceToImpl() throws ClassNotFoundException {
    Class<T> interfaceClass = (Class<T>) Class.forName(interfaceName);
    Class<? extends T> implementationClass = (Class<? extends T>) Class.forName(implementationClassName);
    bind(interfaceClass).to(implementationClass).asEagerSingleton();
  }
};
 
L

lam_tr

Top Contributor
Erstmal hast du einen Compilefehler, weil Upper Bounds in parametrisierten Typen nicht Variablen sein können.
Desweiteren kannst du einen Typparameter in einer Methode einführen, der die Verbindung zwischen dem Interface und der Implementierungsklasse ausdrückt. Ausserdem, du ja zur Laufzeit nicht statisch den Typ prüfen kannst, brauchst du explizite Casts, die entsprechend unsicher sind, also eine Warnung generieren werden:
Java:
new AbstractModule() {
  @Override
  protected void configure() {
    try {
      bindInterfaceToImpl();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  @SuppressWarnings("unchecked")
  private <T> void bindInterfaceToImpl() throws ClassNotFoundException {
    Class<T> interfaceClass = (Class<T>) Class.forName(interfaceName);
    Class<? extends T> implementationClass = (Class<? extends T>) Class.forName(implementationClassName);
    bind(interfaceClass).to(implementationClass).asEagerSingleton();
  }
};
Funktioniert einwandfrei, habe gerade getestet. Danke. Das ist echt Advanced Reflection!
 
H

httpdigest

Top Contributor
Das ist echt Advanced Reflection!
Nicht wirklich. Ich würde sagen, mit Reflection hat das gar nichts zu tun. Class.forName() würde ich nicht zu Reflection zählen. Du musst halt deine Ausdrücke nur entsprechend typisieren, dann klappt's auch. Und manchmal sind Generics da auch hilfreich.
 
L

lam_tr

Top Contributor
Kann ich eigentlich nachdem der Injector erstellt wurde nachträglich noch weitere Module ergänzen zur Laufzeit?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Google Guice Field Injection returns null Allgemeine Java-Themen 2
M Google Guice (Assisted Injects) - Buggy oder mach ich's falsch? Allgemeine Java-Themen 5
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
DamienX Google Guice AOP + Logging Allgemeine Java-Themen 3
T Google Links in einer Liste Allgemeine Java-Themen 4
G Google-Suche ist nicht auslesbar?! Allgemeine Java-Themen 18
I Java google Sandbox benutzen Allgemeine Java-Themen 1
X Lotto - google caliper Benchmark Allgemeine Java-Themen 4
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
T Google Maps API nächste Person Allgemeine Java-Themen 5
T Google OAuth 2.0 aber wie Allgemeine Java-Themen 16
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
M Google App Engine macht Probleme Allgemeine Java-Themen 4
yvesdaeschle Google Spreadsheet Allgemeine Java-Themen 6
M google plus java api - Anfänger sucht Hilfe Allgemeine Java-Themen 7
M GWT Project nur in Google Chrome sichtbar Allgemeine Java-Themen 7
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
S Frage: Google Maps "Map" in Java Allgemeine Java-Themen 3
M Google API Allgemeine Java-Themen 6
algorismi Google maps in Java Swing Allgemeine Java-Themen 2
P Google Abfrage auslesen Allgemeine Java-Themen 2
FoolMoon API für Google Suchergebnisse? Allgemeine Java-Themen 23
Pfirsich Java + Begriff = Pos + Domain (Google API) !!! Allgemeine Java-Themen 14
M Google Maps mit Java Allgemeine Java-Themen 5
B Regex -> Bspw. _NUR_ GOOGLE.de Allgemeine Java-Themen 7
R Google Keyword Position Allgemeine Java-Themen 11
R Wie Google & Co mit Java nutzen? Allgemeine Java-Themen 16
J Bitte um Kurzinfo bez. JMF (ja, war bei Forumssuche/google) Allgemeine Java-Themen 2
Y Google Map + JSP Tag Libary Allgemeine Java-Themen 2
N google maps api mit javaserver faces Allgemeine Java-Themen 5
C Server-Zahl von google.com Allgemeine Java-Themen 11
L Guice Dependency Injection Allgemeine Java-Themen 0
I WebSockets mit Jersey und Guice Allgemeine Java-Themen 0
T GUICE- Dependency Injection- WANN nutze ich Providers? Allgemeine Java-Themen 2
N Guice - Ohne injector.getInstance Allgemeine Java-Themen 2
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
Landei Guice - Injection von "zwischendurch" erzeugten Objekten Allgemeine Java-Themen 4
F DI @SesionScoped Guice Allgemeine Java-Themen 4
Jay_030 Guice + Hibernate = Probleme? Allgemeine Java-Themen 2
Jay_030 Guice: Injector übergeben? Allgemeine Java-Themen 3
Jay_030 Guice: Frage im Umgang mit Unit-Tests Allgemeine Java-Themen 4
looparda Best Practice Jigsaw module-info.java Allgemeine Java-Themen 1
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
RalleYTN Java 9 Module mit Dependency auf Pre-Java 9 JARS Allgemeine Java-Themen 2
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
F externe module. geht das in Java? Allgemeine Java-Themen 3
M Maven Wie Persistence Module aufteilen Allgemeine Java-Themen 6
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
M java Komonenten oder Module Allgemeine Java-Themen 3
L Grundsystem + Module = Wie realisieren? Allgemeine Java-Themen 5
F Jar-Module einbinden Allgemeine Java-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben