Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

// Создать массив из 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:

  • Читать дальше
  • 1
  • ...
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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