ClassCastException in der Guice-Aufgabe

m_mueller
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 13. Nov 2009 18:46

ClassCastException in der Guice-Aufgabe

Beitrag von m_mueller »

Hey,
unsere Guice-Implementierung sieht schon recht gut aus.

Wir binden also bspw. TextEditor.class an EnglishTextEditor.class
Ebenso SpellChecker.class an EnglishSpellChecker.class
etc.

Leider können wir uns nicht erklären, warum der Compiler bei SpellChecker folgendes bemängelt :x :

Code: Alles auswählen

The method to(Class<? extends SpellChecker>) in the type LinkedBindingBuilder<SpellChecker> is not applicable for the arguments (Class<EnglishSpellChecker>)
Fügt man per Quick-Fix den Cast ein, meckert der Compiler zwar nicht mehr, aber beim starten der ConstrucitonWithGuice.Main wirft er folgende Exception:

Code: Alles auswählen

Exception in thread "main" com.google.inject.ProvisionException: Guice provision errors:

1) Error injecting constructor, java.lang.ClassCastException: guiceEmailer.EnglishSpellChecker cannot be cast to guiceEmailer.SpellChecker
  at guiceEmailer.DefaultEmailer.<init>(DefaultEmailer.java:31)
  while locating guiceEmailer.DefaultEmailer
  while locating guiceEmailer.Emailer
    for parameter 0 at guiceEmailer.EnglishTextEditor.<init>(EnglishTextEditor.java:16)
  while locating guiceEmailer.EnglishTextEditor
  while locating guiceEmailer.TextEditor

1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
	at guiceEmailer.ConstructionWithGuice.main(ConstructionWithGuice.java:17)
Caused by: java.lang.ClassCastException: guiceEmailer.EnglishSpellChecker cannot be cast to guiceEmailer.SpellChecker
	at guiceEmailer.DefaultEmailer$$FastClassByGuice$$cb57226a.newInstance(<generated>)
	at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
	at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:60)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
	at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
	at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
	at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
	at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 2 more

Warum funktioniert das bei TextEditor etc., die ja von der Struktur (TextEditor = Interface, EnglishTextEditor = implementiert das Interface) ähnlich aufgebaut sind, wie SpellChecker?

Any ideas :?:

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ClassCastException in der Guice-Aufgabe

Beitrag von MisterD123 »

Was ist eure Team-Nummer? Dann schau ich mir das morgen mal an wenn ich in der Sprechstunde sitze und drauf warte dass keiner kommt ;) Oder noch besser, wenn ihr Zeit habt, kommt einfach mal vorbei :)

m_mueller
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 13. Nov 2009 18:46

Re: ClassCastException in der Guice-Aufgabe

Beitrag von m_mueller »

Wir sind Team 21. Leider werde ich es morgen nicht zur Sprechstunde schaffen, da ich nicht in Darmstadt bin.
Wäre aber super, wenn du mal einen Blick auf unsern Code werfen könntest!

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ClassCastException in der Guice-Aufgabe

Beitrag von marcel_b »

benutzt du die korrekte superklasse? Check mal die imports. Wenn das Typsystem meckert, kann es vielleicht sein, das du beim Kopieren noch die falschen Referenzen stehen hast

m_mueller
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 13. Nov 2009 18:46

Re: ClassCastException in der Guice-Aufgabe

Beitrag von m_mueller »

Danke!

Das Problem mit den "falschen" Imports hatten wir zwar schon & konnten es auch lösen, aber in EnglishSpellChecker.java hatte sich noch ein falscher Bezug versteckt :oops:
Jetzt funktioniert's :)

Wenn ich das richtig gesehen habe, belässt Eclipse beim Kopieren aller Klassen eines Quell-Pakets die Import-Bezüge auf den alten Paketen. Das ist ja noch nachvollziehbar.
Als wir aber die Imports im Ziel-Paket angepasst haben, wurden sie im Quell-Paket teilweise auch mit geändert, so dass wir sie da auch wieder korrigieren mussten.

Gibt es für dieses Verhalten einen nachvollziehbaren Grund? Gibt es ein "Clean-Copy", das die Java-Files kopiert und die Imports (sofern möglich) direkt an das Ziel-Paket anpasst?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ClassCastException in der Guice-Aufgabe

Beitrag von MisterD123 »

Nicht dass ich wüsste, aber im zweifelsfall bietet dein OS dir ein context-insensitives File Copy an. ;)

Antworten

Zurück zu „Archiv“