Как получить параметры из дочернего объекта в JavaFX TreeView? [Дубликат]

Здесь вы можете найти все подробности:

  • IDEA-170117 "objc: класс JavaLaunchHelper реализован в обоих ..." предупреждение в пультах запуска

Это старая ошибка в Java на Mac, которую вызвал агент Java , используемый IDE при запуске приложения. Это сообщение безвредно и безопасно игнорировать. Комментарий разработчика Oracle:

Сообщение является доброкачественным, это не отрицательно влияет на эту проблему, поскольку обе копии этого класса идентичны (скомпилированы из одного и того же источника).

Проблема исправлена ​​ в Java 9 и в Java 8 update 152 .

Если это вас раздражает или влияет на ваши приложения каким-либо образом (это не должно быть), обходной путь для IntelliJ IDEA должен отключить агент запуска idea_rt, добавив idea.no.launcher=true в idea.properties (Help | Edit Custom Properties...). Обходной путь вступит в силу при следующем перезапуске среды IDE.

Я не рекомендую отключать агент запуска IntelliJ IDEA. Он используется для таких функций, как изящное выключение (кнопка выхода), потоки дампов, обходные пути - проблема с слишком длинной командной строкой, превышающей пределы ОС и т. Д. Потеря этих функций только ради скрытия безобидного сообщения, вероятно, не стоит того, до вас.

1
задан 30 January 2016 в 09:43
поделиться

2 ответа

Вот как вы можете использовать оператор instanceof:

static void method(Food a) {
    if (a instanceof bread4) {
        bread4 b = (bread4) a;
        System.out.println("Downcasting performed");
    }
}

Оператор instanceof берет объект с левой стороны и проверяет, является ли он экземпляром правой стороны аргумент, который является классом.

obj instanceof Claz

Это возвращает true, если класс obj является экземпляром Claz.

На боковой ноте я также настоятельно рекомендую следовать правилам именования Java. Вместо имени вашего класса bread4 назовите его Bread4.

Классы должны начинаться с букв верхнего регистра, тогда как переменные и методы должны начинаться с строчных букв.

1
ответ дан Bono 21 August 2018 в 09:53
поделиться

оператор instanceof обеспечивает проверку типа времени выполнения. Например, если у вас есть класс Food и два подтипа Bread4 и Bread5, то:

static void method(Food a) {
   Bread4 b = (Bread4) a;
   System.out.println("Downcasting performed"); 
}

вызывает этот метод, например:

Food four = new Bread4();
Food five = new Bread5();
Bread4.method(four); //the cast inside is done to Bread4, therefore this would work
Bread4.method(five); //the object of type Bread5 will be cast to Bread4 -> ClassCastException

Чтобы этого избежать, используйте поэтому оператор instanceof

static void method(Food a) {
   if (a instanceof Bread4) {
       Bread4 b = (Bread4) a;
       System.out.println("Downcasting performed"); 
   }
}

, если вы вызываете

Bread4.method(five)

, проверка возвращает false, поэтому не возникает ClassCastException.

Надеюсь, что это ответит на ваш вопрос ,

2
ответ дан Timotei 21 August 2018 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: