Вложенные пакеты в Java

Во-первых, я хочу создать пользовательскую библиотеку со следующей структурой:

источник:

  • LibA.pack1
    • ClassName0.java
  • LibA.pack2
    • ClassName1.java

У меня нет проблем с этим. Позже я хочу импортировать эту библиотеку в другой проект и вызвать

import LibA.*;

(использовать оба класса pack1 и pack2), что не удастся, так как требуется полное имя, т.е.

import LibA.pack1;

Как я могу импортировать всю библиотеку сразу, чтобы иметь возможность использовать оба класса pack1 и pack2?

P.S. Это определенно не называется «вложенными пакетами», но я понятия не имею, как это назвать. P.P.S. Я использую Eclipse, если это имеет значение.

Заранее спасибо:)


person Denis Korekov    schedule 22.10.2014    source источник


Ответы (1)


Вы не можете, так как в java нет такой вещи, как вложенные пакеты. Вы должны явно импортировать оба пакета.

import LibA.pack1.*;
import LibA.pack2.*;

LibA.pack1 никак не связан с LibA.pack2, и оба они не имеют отношения к пакету LibA, поэтому, если LibA имеет дополнительные классы, которые вы хотите импортировать, вам понадобится третий импорт:

import LibA.*;

Иерархия пакетов

Сначала пакеты кажутся иерархическими, но это не так. Например, Java API включает в себя пакет java.awt, пакет java.awt.color, пакет java.awt.font и многие другие пакеты, начинающиеся с java.awt. Однако пакет java.awt.color, пакет java.awt.font и другие пакеты java.awt.xxxx не включены в пакет java.awt. Префикс java.awt (Java Abstract Window Toolkit) используется для ряда связанных пакетов, чтобы сделать взаимосвязь очевидной, но не показать включение.

При импорте java.awt.* импортируются все типы из пакета java.awt, но не импортируются пакеты java.awt.color, java.awt.font или любые другие пакеты java.awt.xxxx. Если вы планируете использовать классы и другие типы в java.awt.color, а также в java.awt, вы должны импортировать оба пакета со всеми их файлами:

import java.awt.*;
import java.awt.color.*;
person Eran    schedule 22.10.2014
comment
Спасибо за идеальное объяснение! - person Denis Korekov; 22.10.2014