Неквалифицированное имя в Java

Учитель на наших уроках программирования говорит о "неквалифицированных именах", но мне интересно, что они на самом деле.

Я подозреваю, что такие вещи, как имена методов, неквалифицированы, но я не уверен.

Кто-нибудь может мне это объяснить? Мне нужно это знать, потому что мне нужно объяснить, как Java выглядит безусловным именем.

5 ответов

Решение

Полное имя - это полное имя, например:

java.util.ArrayList list;

Неквалифицированное имя имеет только последнюю часть:

import java.util.*;

ArrayList list;

Термин также может применяться к полям и методам.


Итак, если вы можете импортировать классы, зачем вам когда-либо использовать квалифицированное имя?

Вам это нужно, когда вы используете два класса, которые, хотя они из разных пакетов, имеют одно и то же имя. Классический пример - класс со смешным именем из JDK:

java.sql.Date

который, кстати, расширяется

java.util.Date

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

public void process(java.util.Date fromDate) {
    RowSet rows = <run query with fromDate as parameter>
    while (rows.nsxt()) {
        java.sql.Date date = rows.getDate(1);
        // code that needs date
    }
}

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

Полное имя в Java включает в себя определенный пакет, из которого произошли класс, интерфейс, перечисление или поле.

Пример: java.util.ArrayList это полное имя.

Неквалифицированное имя - это просто класс, интерфейс, перечисление или поле без информации о пакете.

Пример: ArrayList

Например, com.yourcompany.domain.Person - это полное имя класса, а Person - имя класса или неквалифицированное имя класса.

Квалифицированное имя: org.springframework.jdbc.core.JdbcTemplate
Имеет имя пакета org.springframework.jdbc.core тогда название класса JdbcTemplate

Неквалифицированное имя: JdbcTemplateЭто только имя класса без имени пакета.

Например: полное имя - это полный адрес вашего дома, а неполное имя - только ваше домашнее имя.

Добавление к разговору части, которая еще не упоминалась (о которой прямо не спрашивают, но я считаю, что это полезное дополнение к беседе):

Все имена в Java требуют квалификации; однако, некоторые настолько интегрированы в работу Java, что предполагается - или, по умолчанию, - "в классе", который вы кодируете (или importред). Лисков (2000) приводит прекрасный пример этого: java.lang - класс, содержащий такие объекты как String,

Вы часто будете видеть неквалифицированные имена в Java. Это часто связано с расположением класса или метода относительно класса, в котором вы пытаетесь получить к нему доступ (тот же пакет). Выше, другие плакаты упомянули концепцию packages на Яве.

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

Другие вопросы по тегам