A)
Class Parent4{
private I18nUtils i18n;
//-----------Here Nullpointerexception occur----------------
public Parent4(){
SetText(i18n.getText("HELLO");
}
}
B)
Class Parent3 extends Parent4{
private I18nUtils i18n;
}
C)
Class ParentParent2 extends Parent3{
private I18nUtils i18n;
}
D)
Class Parent extends ParentParent2{
private I18nUtils i18n;
}
E)
Class Child extends Parent{
protected method_name(){
//.......DO Something......
}
}
My Test Class:
public testclass{
Class cls = Class.forName("Child");
Object obj = cls.newInstance();
Method method = cls.getDeclaredMethod("method_name",Null);
method.setAccessible(true);
method.invoke(obj, null);
Таким образом, при создании объекта дочернего класса он вызывал и вызывал всю зависимость дочернего класса, инициализировал с помощью фиктивного объекта и вызывал весь родительский класс и его конструктор.
Хотя i18n по умолчанию имеет значение null. 1) Я пытался получить доступ с отражением. с помощью superClass (). getDeclared ("i18n"). Но в конечном итоге это только доступ к его предыдущему классу только. Поэтому он не устанавливает значение для класса Parent5 ().
2) Также я попытался получить прямой доступ к полю i18n класса Parent5. Но при вызове дочернего класса. Он создаст новый экземпляр и так же сбросит родительский класс i18n класса parent5 () как ноль.