Compiler-Fehler Google Guice Module zur Laufzeit zusammenstellen und binden

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
 

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();
  }
};
 

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!
 
Ä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
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
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
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
Robert Zenz Will mir jemand erklaeren wofuer man Module wirklich braucht? Allgemeine Java-Themen 38
M ist in der Module-Info "opens PACKAGENAME" bedenklich? Allgemeine Java-Themen 0
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
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

Neue Themen


Oben