В реализации LiveConnect интерпретатора Rhino определены глобальные функ_ ции, выполняющие импорт Java_пакетов и Java_классов. Для импорта пакета необходимо передать объект JavaPackage функции importPackage(), а для импорта класса – объект JavaClass функции importClass():
importPackage(java.util);
importClass(java.awt.List);
Функция importClass() копирует единственный объект JavaClass из объекта JavaPackage в глобальный объект. Предыдущий вызов функции importClass() эк_ вивалентен следующей строке:
var List = java.awt.List;
242 Глава 12. Разработка сценариев для Java*приложений
На самом деле функция importPackage() не копирует все объекты JavaClass из JavaPackage в глобальный объект. Вместо этого она (с аналогичным эффектом) просто добавляет пакет во внутренний список пакетов, применяемый для разре_ шения неизвестных идентификаторов, и копирует только те объекты JavaClass, которые фактически используются. Таким образом, после представленного вы_ зова функции importPackage() появляется возможность задействовать в Java_ Script идентификатор Map. Если не объявлялось переменной с именем Map, этот идентификатор распознается как объект java.util.Map класса JavaClass и записы_ вается во вновь созданное свойство Map глобального объекта.
Следует отметить, что импортировать пакет java.lang с помощью функции im_ portPackage() нежелательно, поскольку пакет java.lang определяет множество функций, чьи имена совпадают с именами встроенных конструкторов и функ_ ций преобразования в JavaScript. Вместо импорта пакетов можно просто скопи_ ровать объект JavaPackage в более удобное место:
var swing = Packages.javax.swing;
Функции importPackage() и importClass() отсутствуют в версии SpiderMonkey, но смоделировать импорт одного класса достаточно просто и к тому же это гораздо безопаснее, поскольку это не приводит к загромождению глобального простран_ ства имен импортируемыми пакетами.