Скажем, у меня есть такой код:
import java.util.Date;
import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
..
// I want to choose util.Date here. How ?
}
}
Должен ли я быть полными квалифицированными именами классов? Могу ли я избавиться от операторов импорта? Распространен ли такой сценарий в реальном программировании?
Ответы:
Вы можете опустить операторы импорта и ссылаться на них, используя весь путь. Например:
Но я бы сказал, что использование двух классов с одним и тем же именем и похожей функцией обычно не лучшая идея, если вы не можете четко указать, что есть что.
источник
your.own.Date
используя ctrl + shift + R. Это автоматически изменит его везде, где вы на него ссылаетесь в своем коде, а также в файле (и имени файла) your / own / Date.java. Любая другая IDE, вероятно, имеет похожую функцию.Date
это идеальное имя. Вы будете использовать его в большей части своего кода. Тем не менее, иногда вам нужно будет вызватьjava.util.Date
функцию, чтобы выполнить преобразование между ними.org.apache.log4j.Logger
иjava.util.logging.Logger
. Обычно я не контролирую ту или иную сторону; Я занимаюсь интеграцией устаревшего кода.используйте полное имя вместо импорта класса.
например
источник
Да, когда вы импортируете классы с такими же простыми именами, вы должны ссылаться на них по их полностью определенным именам классов. Я бы оставил операторы импорта, так как это дает другим разработчикам представление о том, что находится в файле, когда они работают с ним.
источник
Другой способ сделать это - создать подкласс:
А затем импортируйте my.own.FQNDate в пакеты с java.util.Date.
источник
Matchers
и MockitoMatchers
в одном классе. Вроде работает со статическими методами..when
s,.thenReturn
s и т. Д. - убираетMockito.
раздувание.Если у вас есть собственный класс даты, вы должны отличать его от встроенного класса Date. т.е. зачем вы создали свой. Что-то вроде ImmutableDate, BetterDate или NanoDate, даже MyDate укажет, почему у вас есть собственный класс даты. В этом случае у них будет уникальное имя.
источник
Вы можете импортировать один из них, используя import. Для всех других подобных классов необходимо указать полные имена классов. В противном случае вы получите ошибку компиляции.
Например:
источник
Этот сценарий не так распространен в реальном программировании, но и не так уж и странен. Бывает, что два класса в разных пакетах имеют одинаковое имя, и нам нужны оба.
Необязательно, что если два класса имеют одинаковое имя, тогда оба будут содержать одинаковые функции, и мы должны выбрать только один из них.
Если нам нужно и то, и другое, то в этом нет ничего плохого. И это тоже неплохая идея для программирования.
Но мы должны использовать полностью определенные имена классов (с одинаковыми именами), чтобы было понятно, о каком классе мы тоже говорим.
:)
источник
Я столкнулся с этой проблемой, когда, например, сопоставляя один класс с другим (например, при переключении на новый набор классов для представления данных о человеке). В этот момент вам понадобятся оба класса, потому что в этом весь смысл кода - сопоставить один с другим. И вы не можете переименовать классы в любом месте (опять же, задача состоит в том, чтобы отображать, а не менять то, что сделал кто-то другой).
Полностью квалифицированный - в одну сторону. Похоже, вы не можете фактически включить оба оператора импорта, потому что Java, например, беспокоится о том, какое «лицо» имеется в виду.
источник
Если вы действительно хотите или вам нужно использовать одно и то же имя класса из двух разных пакетов, у вас есть два варианта:
1-выбрать один для использования при импорте и использовать полное имя класса другого:
2-всегда используйте полное имя класса:
источник
У меня была та же проблема, что и у меня, я упорядочил библиотеку последовательно, например были java.lang.NullPointerException и javacard.lang.NullPointerException. Я сделал первую библиотеку по умолчанию, и если вам нужно использовать другую, вы можете явно указать полное имя класса.
источник
Когда вы вызываете классы с одинаковыми именами, вы должны явно указать пакет, из которого вызывается класс.
Сделать можно так:
Вывод:
источник