Конфликт имен классов при импорте нового пакета (Java) - PullRequest
5 голосов
/ 25 сентября 2011

Прежде всего, я новичок в Java, поэтому мой вопрос может быть глупым, но мне все еще нужен ответ:)

У меня есть класс, который обрабатывает вопросы отображения.Я назвал его «Display», но проблема в следующем: мне нужно импортировать класс с именем org.lwjgl.opengl.Display.

Конечно, у меня есть эта ошибка в моем выражении класса Display:

«Дисплей» уже определен в этом модуле компиляции

И, конечно, я могу переименовать свой класс, но я хотел бы быть уверен, что нет способа легко обойтиэта проблема.

В общем случае (потому что, используя игровую библиотеку, такую ​​как LWJGL, я думаю, у меня ее будет много), лучше ли ставить префикс всему моему классу, чтобы избежать подобной метки?

Обновление : класс уже находится в пакете.

package Graphics;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

public class Display { ... }

Спасибо.

Ответы [ 2 ]

23 голосов
/ 25 сентября 2011

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

org.lwjgl.opengl.Display display = new org.lwjgl.opengl.Display().

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

0 голосов
/ 13 октября 2016

Это происходит, когда имя вашего java-класса и имя импортируемой библиотеки совпадают. В вашем случае Scanner ссылается на имя класса, а не на библиотеку. Изменение имени класса на другое будет самым простым способом решения этой ошибки.

public class Foo {

private static class Display {...}

}

также поможет решить проблему.

...