Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

importClass(java.lang.System);

for(var m in System) print(m); // Выведет статические члены java.lang.System

for(m in f) print(m); // Выведет члены экземпляра java.io.File

// Обратите внимание, что таким способом нельзя перечислить классы в пакете

for (с in java.lang) print(c): // Этот прием не сработает

Rhino позволяет программам на языке JavaScript получать и изменять значения элементов Java-массивов, как если бы они были JavaScript-массивами. Конечно, Java-массивы отличаются от JavaScript-массивов: они имеют фиксированную длину, их элементы имеют определенный тип, и они не имеют JavaScript-методов, таких как

slice
. В JavaScript не существует синтаксических конструкций, которые могли бы использоваться интерпретатором Rhino для создания Java-массивов в программах на языке JavaScript, поэтому для этой цели необходимо использовать класс java.lang.reflect Array:

// Создать массив из 10 строк и массив из 128 байтов

var words = java.lang.reflect.Array.newlnstance(java.lang.String, 10);

var bytes = java.lang.reflect.Array.newlnstance(java.lang.Byte.TYPE, 128);

// После создания с массивами можно работать как с JavaScript-массивами:

for(var і = 0; і < bytes.length; i++) bytes[i] = i;

Программирование на языке Java часто связано с реализацией интерфейсов. Чаще всего с этой необходимостью приходится сталкиваться при разработке графических интерфейсов, когда каждый обработчик события должен реализовать интерфейс приемника событий. Следующие примеры демонстрируют, как это сделать:

// Интерфейсы: Реализация интерфейсов выглядит следующим образом:

var handler = new java.awt.event.FocusListener({

focusGained: function(e) { printfgot focus"); },

focusLost: function(e) { print("lost focus"): }

}):

// Аналогично выполняется расширение абстрактных классов

var handler = new java.awt.event.WindowAdapter({

windowclosing: function(e) { java.lang.System.exit(0); }

}):

// Когда интерфейс определяет единственный метод, можно использовать простую функцию

button.addActionListener(function(e) { print("button clicked"); });

// Если все методы интерфейса или абстрактного класса имеют одну и ту же сигнатуру,

// в качестве реализации можно использовать единственную функцию,

// a Rhino будет передавать ей имя метода в последнем аргументе

frame.addWindowListener(function(e, name) {

if (name === "windowclosing") java.lang.System.exit(0);

});

// Если необходимо определить объект, реализующий несколько интерфейсов,

// можно использовать класс JavaAdapter:

var о = new JavaAdapter(java.awt.event.ActionListener, java.lang.Runnable, {

run: function {}. // Реализует интерфейс Runnable

actionPerformed: function(e) {} // Реализует интерфейс ActionListener

});

Когда Java-метод возбуждает исключение, интерпретатор Rhino продолжает его распространение как JavaScript-исключения. Получить оригинальный Java-объект java.lang.Exception можно через свойство javaException JavaScript-объекта Error:

try {

java.lang.System.getProperty(null); // null - недопустимый аргумент

}

catch(e) { // e - JavaScript-исключение

print(e.javaException); // это обертка для java.lang.NullPointerException

}

Здесь необходимо сделать последнее замечание по поводу преобразования типов в Rhino. Интерпретатор Rhino автоматически преобразует простые числа, логические значения и null. Java-тип char интерпретируется в языке JavaScript как число, так как в языке JavaScript отсутствует символьный тип. JavaScript-строки автоматически преобразуются в Java-строки, но (и это может быть камнем преткновения) Java-строки остаются объектами

java.lang.String
и не преобразуются обратно в JavaScript-строки. Взгляните на следующую строку из примера, приводившегося ранее:

var version = java.lang.System.getProperty("java.version");

После выполнения этой инструкции переменная version будет хранить объект java.lang.String. Он обычно ведет себя как JavaScript-строка, но существуют важные отличия. Во-первых, Java-строка вместо свойства length имеет метод length. Во-вторых, оператор typeof возвращает тип «object» для Java-строк. Java-строку нельзя преобразовать в JavaScript-строку вызовом метода toString, потому что все Java-объекты имеют собственные методы toString, возвращающие экземпляры javadang.String. Чтобы преобразовать Java-значение в строку, его нужно передать JavaScript-функции String:

Поделиться:
Популярные книги

Древесный маг Орловского княжества 2

Павлов Игорь Васильевич
2. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 2

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Товарищ "Чума"

lanpirot
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Товарищ Чума

Контрольный поцелуй

Донцова Дарья
8. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
9.15
рейтинг книги
Контрольный поцелуй

Кодекс Охотника. Книга XXXII

Винокуров Юрий
32. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXII

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Чужак из ниоткуда 2

Евтушенко Алексей Анатольевич
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 2

Наследник для дона мафии

Тоцка Тала
2. Наследники мафии
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Наследник для дона мафии

Хроники Тириса. Книга 3

Маханенко Василий Михайлович
3. Хроники Тириса
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
5.00
рейтинг книги
Хроники Тириса. Книга 3

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Эпоха Опустошителя. Том IX

Павлов Вел
9. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том IX

Гнев Пламенных

Дмитриева Ольга Олеговна
5. Пламенная
Фантастика:
фэнтези
4.80
рейтинг книги
Гнев Пламенных