Доступ к объекту, созданному в innerClass из другого места java
Поэтому у меня есть externalClass и innerClass, и я хочу получить доступ к объекту, созданному из innerClass, с использованием externalClass, например:
public Class outerClass{
Class innerClass{
//properties
}
}
так что я хочу сделать что-то вроде этого:
public class Main {
public static void main(String [] args) {
outerClass outerObj = new outerClass();
outerClass.innerClass innerObj = outerObj.new innerClass();
//this is what i want:
outerObj.innerObj;
}
}
это может быть сложно, но я хочу получить innerObject, используя только externalObject
4 ответа
public Class outerClass{
Class innerClass{
//properties
}
public innerClass innerObj;
}
outerObj.innerObj = outerClass.new innerClass();
Это будет работать:
public class outerClass{
public static class innerClass{
//properties
}
}
outerClass.innerClass innerObj = outerObj.new innerClass();
innerObj
является локальной переменной You can refer to it directly as
innerObj
Для нестатического внутреннего класса компилятор автоматически добавляет скрытую ссылку на экземпляр объекта "owner". Когда вы пытаетесь создать его из статического метода (скажем, основного метода), не существует собственного экземпляра. Это все равно что пытаться вызвать метод экземпляра из статического метода - компилятор не допустит этого, потому что на самом деле у вас нет экземпляра для вызова.
Таким образом, внутренний класс либо сам должен быть статическим (в этом случае не требуется владения экземпляром), либо вы создаете экземпляр внутреннего класса только из нестатического контекста.
Так что сделайте свой внутренний класс static
public static class innerClass{
//properties
}
Ты можешь позвонить
outerClass.innerClass innerObj = new outerClass.innerClass();
Если вы хотите получить доступ к полям только через точку (.), Следует рассмотреть возможность использования
статическое внутреннее поле в вашем externalClass, как PrintStream в классе System
Пример:
public class outerClass{
public static innerClass innerObject = new innerClass();
static class innerClass{
//properties
}
}
а затем в основной метод
outerClass outerClass= new outerClass();
outerClass.innerObject.yourfied