Próbuję po raz pierwszy sztylet, a po skonfigurowaniu modułu otrzymuję błąd, którego nie rozumiem.Sztylet: klasa nie mogła być powiązana z kluczem
Mój kod to:
public class Parrot {
private Language language;
@Inject
public Parrot(Language language) {
this.language = language;
}
public void sayHello() {
System.out.println(language.getSalute());
}
}
public interface Language {
public String getSalute();
}
public class EnglishLanguage implements Language {
@Override
public String getSalute() {
return "Hello!";
}
}
Mój moduł jest
@Module(
injects = Language.class
)
public class PetShopModule {
@Provides Parrot provideParrot(Parrot parrot){
return parrot;
}
}
I w kodzie używam go w ten sposób
EnglishLanguage lang=SystemApp.getSystemLanguage();
ObjectGraph objectGraph = ObjectGraph.create(new PetShopModule());
objectGraph.inject(myLanguage);
Parrot parrot = objectGraph.get(Parrot.class);
Kompilator narzeka:
error: com.example.petshop.Language could not be bound
with key com.example.petshop.Language required by com.example.petshop.PetShopModule
for com.example.petshop.PetShopModule
Co robię źle?
Uwaga: Jest to tylko uproszczony przykład, w prawdziwym kodzie EnglishLanguage to system klasy i nie mogą modyfikować ani tworzyć go, po prostu odniesienie