Здесь вы можете найти все подробности:
Это старая ошибка в 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. Он используется для таких функций, как изящное выключение (кнопка выхода), потоки дампов, обходные пути - проблема с слишком длинной командной строкой, превышающей пределы ОС и т. Д. Потеря этих функций только ради скрытия безобидного сообщения, вероятно, не стоит того, до вас.
Вот как вы можете использовать оператор 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
.
Классы должны начинаться с букв верхнего регистра, тогда как переменные и методы должны начинаться с строчных букв.
оператор 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.
Надеюсь, что это ответит на ваш вопрос ,