Пакет в языке программирования Java – это набор взаимосвязанных Java_классов. Класс JavaPackage – это тип данных языка JavaScript, представляющий Java_пакет. Свойствами JavaPackage являются классы (классы представляются в виде класса JavaClass, о котором мы вскоре поговорим), а также любые другие пакеты, входящие в состав данного пакета. Классы в JavaPackage не поддаются перечислению, вследствие этого невозможно использовать цикл for/in для выяс_ нения содержимого пакета.
Все объекты JavaPackage содержатся внутри родительского объекта JavaPackage. Глобальное свойство с именем Packages – это объект JavaPackage верхнего уровня, который выступает в качестве корня этого дерева иерархии пакетов. Данный объект обладает такими свойствами, как java и javax, которые также являются объектами JavaPackage, представляющими различные иерархии Java_классов, доступных интерпретатору. Например, объект класса JavaPackage – это Pack_
240 Глава 12. Разработка сценариев для Java*приложений
ages.java, он содержит объект класса JavaPackage – Packages.java.awt. Для удобст_ ва глобальный объект имеет еще одно свойство java, которое является сокраще_ нием Packages.java. Таким образом, вместо того чтобы вводить длинное имя Pack_ ages.java.awt, можно просто ввести java.awt.
Продолжая наш пример, скажем, что java.awt – это объект JavaPackage, содержа_ щий объекты JavaClass, такие как класс java.awt.Button. Кроме того он содержит еще один объект JavaPackage – класс java.awt.image, который представляет в Java пакет java.awt.image.
Класс JavaPackage имеет некоторые недостатки. Не существует способа сказать заранее, является ли свойство объекта JavaPackage ссылкой на Java_класс или другой Java_пакет, вследствие чего интерпретатор JavaScript исходит из предпо_ ложения, что это класс, и пытается загрузить его. Таким образом, когда исполь_ зуется выражение, такое как java.awt, LiveConnect сначала ищет класс с таким именем. Если класс не найден, LiveConnect предполагает, что свойство ссылает_ ся на пакет, но при этом нет никакой возможности проверить наличие пакета и узнать, существуют ли реальные классы в этом пакете. Это порождает еще один серьезный недостаток: если программист допускает опечатку в имени клас_ са, LiveConnect благополучно воспримет опечатку как имя пакета, вместо того чтобы сообщить, что класс с таким именем не существует.