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

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

Жанры

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

// Глобальная переменная Packages определяет корень иерархии пакетов Java

Packages.any.package.name // Любой пакет из CLASSPATH

java.lang // Глобальная переменная java - краткая ссылка на Packages.java

javax.swing // A javax - краткая ссылка на Packages.javax

// Классы: доступны как свойства пакетов

var System = java.lang.System;

var JFrame = javax.swing.JFrame;

Поскольку

пакеты и классы представлены как объекты JavaScript, их можно присваивать переменным, чтобы давать им более короткие имена. Но при желании их можно импортировать более формальным способом:

var ArrayList = java.util.ArrayList; // Создать краткое имя для класса

importClass(java.util.HashMap); // Аналог: var HashMap=java.util.HashMap

// Импорт пакета (отложенный) с помощью importPackage.

// Не следует импортировать java.lang: слишком много конфликтов имен

// с глобальными переменными JavaScript.

importPackage(java.util);

importPackage(java.net);

// Другой прием: передать произвольное количество классов и пакетов функции

// JavaImporter и использовать возвращаемый объект с инструкцией with

var guipkgs = JavaImporter(java.awt, java.awt.event, Packages.javax.swing);

with (guipkgs) {

/* Здесь определены такие классы, как Font, ActionListener и JFrame */

}

С помощью ключевого слова

new
можно создавать экземпляры классов языка Java, как если бы это были классы JavaScript:

// Объекты: создание из классов Java с помощью ключевого слова new

var f = new java. io. File("tmp/test''); // Этот объект используется ниже

var out = new java.io.FileWriter(f);

Интерпретатор Rhino позволяет использовать JavaScript-оператор instanceof для работы с объектами и классами на языке Java:

f instanceof java.io.File // => true

out instanceof java.io.Reader // => false: объект Writer, а не Reader

out instanceof java.io.Closeable // => true: Writer реализует Closeable

Как видно выше в примерах создания объектов экземпляров, интерпретатор Rhino позволяет передавать значения

конструкторам Java и присваивать возвращаемые ими значения переменным JavaScript. (Обратите внимание на неявное преобразование типов, выполняемое интерпретатором Rhino в этом примере: JavaScript-строка "/tmp/test" автоматически преобразуется в значение типа java.lang.String.) Методы Java очень похожи на конструкторы Java, и Rhino позволяет программам на языке JavaScript вызывать методы на языке Java:

// Статические методы на языке Java действуют подобно функциям JavaScript

java.lang.System.getProperty("java.version") // Вернет версию Java

var isDigit = java.lang.Character.isDigit; // Присвоит статич. метод переменной

isDigit("t") // => true: Арабская цифра 2

// Вызвать методы экземпляра объектов f и out на языке Java, созданных выше

out.write("Hello World\n");

out.close:

var len = f.length;

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

// Прочитать значение статического поля Java-класса

var stdout = java.lang.System.out:

// Rhino отображает методы доступа в отдельные свойства JavaScript

f.name // => "/tmp/test": вызовет f.getName

f.directory // => false: вызовет f.isDirectory

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

// Предположим, что Java-объект о имеет метод f, который принимает целое

// или вещественное число. В JavaScript необходимо будет явно указать сигнатуру:

о[’f(int)'](3); // Вызвать метод, принимающий целое число

о['f(float)'](Math.PI); // Вызвать метод, принимающий вещественное число

Для итераций по методам, полям и свойствам Java-классов можно использовать цикл

for/in
:

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

Место под солнцем

Гавриил Одинокий
Старинная литература:
прочая старинная литература
6.00
рейтинг книги
Место под солнцем

Российская империя в сравнительной перспективе

Коллектив авторов
Научно-образовательная:
история
политика
5.00
рейтинг книги
Российская империя в сравнительной перспективе

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Каратила

Поповский Андрей Владимирович
Детективы:
боевики
6.50
рейтинг книги
Каратила

Лекарь Империи 2

Карелин Сергей Витальевич
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.80
рейтинг книги
Лекарь Империи 2

Лекции профессора Московской Духовной Академии А. И. Осипова

Осипов Алексей Ильич
Религия и эзотерика:
религия
5.00
рейтинг книги
Лекции профессора Московской Духовной Академии А. И. Осипова

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.43
рейтинг книги
Точка Бифуркации

Рассказы старых переплетов

Белоусов Роман Сергеевич
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Рассказы старых переплетов

Информационные технологии в СССР. Создатели советской вычислительной техники

Малиновский Борис Николаевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Информационные технологии в СССР. Создатели советской вычислительной техники

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Восточный массаж

Ханников Александр Александрович
Дом и Семья:
здоровье и красота
7.00
рейтинг книги
Восточный массаж

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

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

Газлайтер. Том 9

Володин Григорий Григорьевич
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9