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

Code: Alles auswählen
The method to(Class<? extends SpellChecker>) in the type LinkedBindingBuilder<SpellChecker> is not applicable for the arguments (Class<EnglishSpellChecker>)
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
