Импортирование двух классов с одинаковым именем. Как обращаться?
Скажем, у меня есть код вроде:
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 ?
}
}
Должен ли я быть полностью квалифицированным именем класса? Могу ли я избавиться от операторов импорта? Является ли такой сценарий распространенным в реальном мире программирования?
Ответы
Ответ 1
Вы можете опустить инструкции импорта и ссылаться на них, используя весь путь. Например:
java.util.Date javaDate = new java.util.Date()
my.own.Date myDate = new my.own.Date();
Но я бы сказал, что использование двух классов с одинаковым именем и подобной функцией обычно не самая лучшая идея, если вы не можете сделать это действительно ясно, что есть.
Ответ 2
используйте полное имя вместо импорта класса.
например.
//import java.util.Date; //delete this
//import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
my.own.Date myDate = new my.own.Date();
// I want to choose util.Date here. How ?
java.util.Date javaDate = new java.util.Date();
}
}
Ответ 3
Да, когда вы импортируете классы с одинаковыми простыми именами, вы должны ссылаться на них по их полностью квалифицированным именам классов. Я бы оставил инструкции импорта, поскольку это дает другим разработчикам представление о том, что находится в файле, когда они работают с ним.
java.util.Data date1 = new java.util.Date();
my.own.Date date2 = new my.own.Date();
Ответ 4
Другой способ сделать это - подкласс it:
package my.own;
public class FQNDate extends Date {
}
И затем импортируйте my.own.FQNDate в пакеты с java.util.Date.
Ответ 5
Этот сценарий не так распространен в реальном программировании, но не слишком странный. Иногда бывает, что два класса в разных пакетах имеют одно и то же имя, и нам нужны оба из них.
Не обязательно, что если два класса имеют одинаковое имя, то оба будут содержать одинаковые функции, и мы должны выбрать только один из них.
Если нам нужны оба, тогда нет никакого вреда в использовании этого. И это тоже неплохая идея программирования.
Но мы должны использовать полностью квалифицированные имена классов (имеющих одно и то же имя), чтобы дать понять, к какому классу мы тоже обращаемся.
:)
Ответ 6
Если у вас есть собственный класс даты, вы должны отличить его от встроенного класса Date. то почему вы создали свой собственный. Что-то вроде ImmutableDate или BetterDate или NanoDate, даже MyDate укажет, почему у вас есть свой собственный класс даты. В этом случае они будут иметь уникальное имя.
Ответ 7
Я сталкиваюсь с этой проблемой, когда, например, сопоставляет один класс другому (например, при переключении на новый набор классов для представления данных человека). В этот момент вам нужны оба класса, потому что это весь смысл кода - сопоставление одного с другим. И вы не можете переименовывать классы в любом месте (опять же, задание - это сопоставить, а не менять то, что кто-то еще сделал).
Полностью квалифицированный - это один из способов. Похоже, что на самом деле вы не можете включать оба оператора импорта, потому что Java беспокоится о том, что означает "Person", например.
Ответ 8
Вы можете импортировать один из них с помощью импорта. Для всех других подобных классов вам необходимо указать Полноценные имена классов. В противном случае вы получите ошибку компиляции.
Например:
import java.util.Date;
class Test{
public static void main(String [] args){
// your own date
my.own.Date myOwndate ;
// util.Date
Date utilDate;
}
}
Ответ 9
Если вам действительно нужно или нужно использовать одно и то же имя класса из двух разных пакетов, у вас есть два варианта:
1-выбрать один для использования в импорте и использовать другое полное имя класса:
import my.own.Date;
class Test{
public static void main(String[] args){
// I want to choose my.own.Date here. How?
//Answer:
Date ownDate = new Date();
// I want to choose util.Date here. How ?
//Answer:
java.util.Date utilDate = new java.util.Date();
}
}
2 - всегда используйте полное имя класса:
//no Date import
class Test{
public static void main(String[] args){
// I want to choose my.own.Date here. How?
//Answer:
my.own.Date ownDate = new my.own.Date();
// I want to choose util.Date here. How ?
//Answer:
java.util.Date utilDate = new java.util.Date();
}
}
Ответ 10
У меня была такая же проблема, что и я, я упорядочил порядок библиотеки, например, были java.lang.NullPointerException и javacard.lang.NullPointerException. Я сделал первый в качестве библиотеки по умолчанию, и если вам нужно использовать другое, вы можете явно указать полное имя класса.