С любой такой большой и сложной программой, как NetBeans (интегрированная среда разработки для Java), вы обязательно будете время от времени сталкиваться со странными сбоями, такими как ложные ошибки.

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

Каким-то образом, согласно NetBeans, класс, над которым вы работаете, внезапно стал повторяющимся классом. И тогда он и его дубликат могут также не существовать, вызывая каскад загадочных ошибок и предупреждений.

Существование повторяющихся классов не имеет никакого смысла, если учесть, что NetBeans требует, чтобы классы Java находились в файлах с одинаковыми именами. Например, ClassA должен находиться в файле ClassA.java, а не в каком-либо другом файле.

А со структурой проекта на основе каталогов, которую использует NetBeans, класс должен находиться в папке, названной в честь пакета, в котором он должен находиться. Таким образом, package01.ClassA будет иметь относительный путь package01/ClassA.java.

Таким образом, даже если у вас есть классы с одинаковыми именами в разных пакетах, операционная система (Windows, Mac OS X, Linux и т. д.) не позволит этим исходным файлам находиться в одной папке.

Каким бы странным ни казался какой-либо конкретный сбой, всегда есть вероятность, что это произошло с кем-то еще раньше, и что он где-то оставил отчет об ошибке. Так что запустите свою любимую поисковую систему.

Это случилось со мной пару недель назад, в пакете kata, с классом EgyptianFractionViewer. Я работал над этим с NetBeans 11.1 под macOS Mojave (на прошлой неделе я обновился до Catalina).

Люди сталкивались с этой проблемой ложного дублирования класса еще в NetBeans 7.3.1, а может быть и раньше (я все еще использую NetBeans 8.2 на своем старом компьютере с Windows 8.2, и я использовал ее для снимков экрана на этой странице).

Как вы можете себе представить, эту проблему трудно воспроизвести, что наверняка подтвердят некоторые из ваших результатов поиска по этой проблеме. Оглядываясь назад, я должен был сделать скриншот (на самом деле у меня было две возможности).

Решение, которое я нашел в Интернете, показалось слишком радикальным. Решил сначала попробовать что-нибудь попроще. Я переименовал предположительно повторяющийся класс EgyptianFractionViewera. Я просто добавил лишнюю букву к его названию.

Вы можете переименовать предположительно дублированный класс, если хотите. Просто выберите имя, которое вряд ли существует где-либо в вашем проекте или на всем компьютере.

Обязательно выполните переименование в диалоговом окне NetBeans Rename Class (щелкните правой кнопкой мыши имя класса и выберите Refactor › Rename… или нажмите Ctrl-R или Control-R).

Надеюсь, это очистит все индикаторы ошибок, оставив только желтые предупреждающие индикаторы или, может быть, зеленый индикатор.

Если все в порядке, теперь вы можете продолжить и переименовать класс обратно в то, что было раньше.

Я не гарантирую, что это будет работать каждый раз, когда вы столкнетесь с ошибкой ложного дублирования класса (и, надеюсь, вы не столкнетесь с этой проблемой более одного или двух раз за многие годы использования NetBeans).

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

Если переименование во что-то другое и переименование обратно в исходное имя не работает, если NetBeans по-прежнему говорит, что это повторяющийся класс, возможно, вам придется принять более решительные меры, например очистить кэш NetBeans.

Очистить кеш NetBeans несложно. Это требует закрытия программы и удаления файла в каталоге, который пользователи обычно не должны трогать, поэтому, если есть более простое решение, вы должны сначала попробовать и посмотреть, работает ли это.