Получить статус экземпляра внутреннего класса

Вариант использования похож на приведенный ниже код. Существует класс (Inner_Demo) внутри другого класса (Outer_Demo). Inner_class будет создан при некотором условии в частном методе внешнего класса.

class Outer_Demo {

    public Outer_Demo() {
        test();
    }

   // private method of the outer class
   private void test() {
       Inner_Demo demo;
       if (condition)
           demo = new Inner_Demo();
   }

   // inner class
   class Inner_Demo {

   }
}

main(){
    Outer_Demo outer = new Outer_Demo();

    // Here I need to check is Inner class got instantiated
    // Trying to print the value as below leads to error create 
    // field/constant Inner_Demo in Outer_Demo
    System.out.println(Outer_Demo.Inner_Demo); // outer.Inner_Demo

   /* Storing the created instance to Outer_Demo.Inner_Demo 
   is allowed */
   Outer_Demo.Inner_Demo inst = outer.new Inner_Demo();
   System.out.println(inst);
}

Мне нужно проверить, создан ли внутренний класс или нет. Я узнал, что вызов внутреннего класса вышеописанным способом неверен.

Отражение могло бы использоваться, если поле демо в методе тестовое задание класса Внешний_Demo не является локальным/имеет доступ на уровне класса. Может ли кто-нибудь помочь мне понять, есть ли способ найти статус внутреннего класса. Любые ссылки на тему полезны. Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
51
1

Ответы 1

Возможно, вы захотите проверить, был ли создан экземпляр объекта этого класса.

Для этой задачи вы должны объявить поле Inner_Demo в своем классе Outer_Demo:

class Outer_Demo {

    public Outer_Demo() {
        test();
    }

Inner_Demo innerDemo;
         ...

Теперь каждый раз, когда создается экземпляр объекта, этому полю должно быть присвоено значение:

innerDemo = new Inner_Demo();

И, наконец, когда вы хотите проверить, существует ли объект, вы просто делаете это так:

if (innerDemo == null) {
   //object does not exist yet and has to be instantiated
} else {
   //object does exist and can be used
}

Спасибо за ответ. Как я уже упоминал в вопросе, это поле является локальным для метода, и это сделано по некоторым соображениям безопасности. Как вы упомянули, если у него есть доступ на уровне класса, получить ценность для нас просто. Я не могу изменить родительский код. Любым другим путем?

Shree 21.03.2019 08:12

Поле является локальным для метода? Это не поле. это просто ссылка на объект, который удаляется после возврата из метода. Если вы имеете в виду «Я не хочу делиться объектом, я просто хочу знать, существует ли он», то вместо поля Inner_Demo объявите простое логическое поле. И устанавливайте его в true каждый раз, когда создается экземпляр объекта. В остальном то же самое. И кстати, если вы не разделяете объект... интересно, какой смысл его создавать...?

Pavel Smirnov 21.03.2019 08:19

«если он существует» не имеет смысла в данном контексте. Без ссылки на объект объект не существует. И если существование объекта не имеет видимого побочного эффекта (который приложение может проверить), нет смысла говорить, что может существовать только один объект. Судя по всему, это все равно не имеет значения.

Holger 22.03.2019 11:14

Другие вопросы по теме