Я пробую свои руки на кинжале. До сих пор я понял, что нужно внедрить зависимость в один класс, нам нужно сначала кинжать, как эта зависимость создается с помощью внедрения модулей или конструктора. Затем использовать эту зависимость с помощью методов Components.
Вот пример кода, который я пытаюсь
Класс войны зависит от Дома1 и Дома2
Военный класс
public class War {
@Inject House1 house1;
@Inject House2 house2;
public void startWar(){
house1.prepareForWar();
house1.reportForWar();
house2.prepareForWar();
house2.reportForWar();
System.out.println("House1 is "+house1);
}
}
Дом1 Класс
public class House1 implements House {
@Inject
public House1() {
}
@Override
public void prepareForWar() {
System.out.println("House1 Prepared for War");
}
@Override
public void reportForWar() {
System.out.println("House1 reported for War");
}
}
Дом2 Класс
public class House2 implements House {
@Inject
public House2() {
}
@Override
public void prepareForWar() {
System.out.println("House2 prepared for war");
}
@Override
public void reportForWar() {
System.out.println("House2 reported for War");
}
}
Класс WarModule
@Module
public class WarModule {
@Provides
public War provideWarObject(){
return new War();
}
}
Класс компонентов
@Component(modules = {WarModule.class})
public interface HouseComponent {
War getWar();
}
Основной класс
public class TempMain {
public War war;
public void startWar(){
war = DaggerHouseComponent.builder().warModule(new WarModule()).build().getWar();
war.startWar();
}
}
Здесь Кинжал знает, как House1 и House2 создаются с помощью Constructor и War Object через WarModule.
Так что в военном классе, когда используются @Inject House1 и @Inject House2, кинжал должен внедрить его, поскольку он знает, как создавать эти зависимости.
Но я получаю исключение Null Pointer здесь
Ошибка:
Исключение в потоке "main" java.lang.NullPointerException
на com.gosemathraj.dagger2.java.models.war.War.startWar (War.java:14)