Java: „zduplikowana klasa” i błąd niezgodnej nazwy pliku

Programiści, którzy nie znają języka Java, mogą czasami mieć problemy z nazewnictwem klas i pakietów. W rzeczywistości wstępne fora Java są wypełnione wątkami zaczynającymi się od pytań dotyczących tych obszarów Java. W tym poście na blogu przyjrzymy się niektórym z tych błędów i niektórym ich przyczynom.

Jeden z bardziej oczywistych błędów występuje, gdy publiczna klasa Java nosi inną nazwę niż plik, który zawiera definicję klasy.

Pokazuje to następny zrzut ekranu. W tym przykładzie klasa została zadeklarowana publicz nazwą Person, ale została zapisana w pliku o nazwie Person2.java. Komunikat o błędzie jest dość wyraźny: „klasa Person jest publiczna, powinna być zadeklarowana w pliku o nazwie Person.java”

Błąd „zduplikowanej klasy” może być czasami trudniejszy do rozwiązania. Jedną z sytuacji, w których ma to miejsce, jest sytuacja, gdy dwa katalogi kodu źródłowego zawierają tę samą klasę o tej samej strukturze pakietu. Ten błąd wygląda tak, jak pokazano na następnej migawce ekranu.

Jak wskazuje powyższy zrzut ekranu, klasa dustin.examples.Personistnieje zarówno w src2katalogu, jak i (tutaj nie pokazano) w srckatalogu („duplicate class: dustin.examples.Person”). Rzeczywiście, są to zduplikowane klasy, przynajmniej jeśli chodzi o pakiet i nazwę klasy.

Błąd „zduplikowana klasa” może również wystąpić, gdy klasa ma taką samą nazwę i ma tę samą hierarchię nazewnictwa pakietów, nawet jeśli jedna z klas istnieje w strukturze katalogów o nazwach katalogów innych niż nazwy pakietów. Pokazuje to następny zrzut ekranu.

Ten zrzut ekranu pokazuje, że „błąd powielenia” występuje, gdy nazwy klas i zadeklarowane nazwy pakietów są zgodne, nawet jeśli plik źródłowy istnieje w katalogach o innych nazwach (nawet innych niż zadeklarowana struktura pakietu). Oznacza to, że jeśli dana klasa została skopiowana do innego katalogu bez zmiany instrukcji pakietu, a nowy katalog znajdował się w ścieżce źródłowej dla javac, wystąpi błąd „zduplikowana klasa”.

Inną interesującą obserwacją z ostatniego przykładu jest to, że javac używa instrukcji package, aby zdecydować, gdzie zbudować plik .class, zamiast używać lokalizacji pliku źródłowego w strukturze katalogów.

W blogu o błędzie zduplikowanej klasy Java Morgy opisuje sytuację, w której napotkał komunikat o błędzie „zduplikowana klasa” (zapomniał umieścić deklarację pakietu klasy na początku klasy).

Wniosek

W tym poście próbowałem pokazać niektóre typowe przyczyny błędów, które mogą być kłopotliwe dla nowych użytkowników Javy. W szczególności pokazałem niektóre z typowych przyczyn błędu „zduplikowanej klasy” i niepasującej do nazwy pliku klasy publicznej.

Ten artykuł „Java:„ zduplikowana klasa ”i błąd niezgodnej nazwy pliku” został pierwotnie opublikowany przez JavaWorld.