русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование данных в LiveConnect


Дата добавления: 2015-07-09; просмотров: 781; Нарушение авторских прав



 

Java – это строго типизированный язык, обладающий относительно большим числом типов данных. В то же время JavaScript является нетипизированным


 

246 Глава 12. Разработка сценариев для Java*приложений

 

языком, обладающим сравнительно небольшим числом типов данных. Посколь_ ку между этими языками имеется такое существенное структурное различие, одна из основных обязанностей LiveConnect заключается в выполнении кор_ ректного преобразования типов данных. Когда JavaScript_сценарий записывает значение в поле Java_объекта или передает аргумент Java_методу, JavaScript_ значение должно быть преобразовано в эквивалентное Java_значение. Когда JavaScript_сценарий читает значение поля Java_объекта или получает возвра_ щаемое значение Java_метода, Java_значение должно быть преобразовано в со_ вместимый тип данных языка JavaScript. К сожалению, преобразование данных в LiveConnect реализовано несколько иначе, нежели в пакете javax.script.

 

Рисунки 12.1 и 12.2 иллюстрируют порядок преобразования данных при записи значений из JavaScript_сценария в Java_программу, и наоборот.

 

Обратите внимание на следующие замечания, касающиеся порядка преобразо_ вания данных на рис. 12.1:

 

• На рисунке показаны не все возможные варианты преобразования типов Java_ Script_данных в типы Java_данных, потому что перед преобразованием из Java_ Script в Java может произойти внутреннее преобразование JavaScript_данных. Например, если JavaScript_сценарий передает число Java_методу, который ожидает получить аргумент типа java.lang.String, интерпретатор JavaScript сначала преобразует число в строку, а затем преобразует ее в Java_строку.

• JavaScript_число может быть преобразовано в любой из элементарных число_ вых типов языка Java. Какое из преобразований будет выбрано, зависит от ти_ па целевого Java_поля или аргумента Java_метода. Обратите внимание: в ходе преобразования может быть утеряна точность числа, например, когда слиш_ ком большое число записывается в Java_поле типа short или производится преобразование вещественного значения в целочисленный Java_тип.




 

 

Рис. 12.1. Преобразование данных при записи Java'значений из JavaScript'сценариев


 

12.2. Взаимодействие с Java*кодом
   

 

• JavaScript_число может быть также преобразовано в экземпляр Java_класса java.lang.Double, но никогда – в экземпляры родственных классов, таких как java.lang.Integer и java.lang.Float.

• В JavaScript отсутствует тип данных для представления символов, поэтому числа JavaScript могут быть преобразованы в элементарный Java_тип char.

• Когда из JavaScript в Java передается объект JavaObject, он «разворачивает_ ся»1, благодаря чему преобразуется в тот Java_объект, который он представ_ ляет. Однако объекты класса JavaClass в JavaScript не преобразуются в экзем_ пляры класса java.lang.Class, как того можно было бы ожидать.

• JavaScript_массивы никак не преобразуются в Java_массивы. Объекты, мас_ сивы и функции языка JavaScript преобразуются в Java_объекты, не имею_ щие стандартизованного прикладного интерфейса и обычно рассматривае_ мые как «черные ящики».

 

К преобразованиям данных, которые приводятся на рис. 12.2, также имеется не_ сколько пояснений:

 

• Поскольку JavaScript не имеет типа для представления символьных данных, элементарный Java_тип char преобразуется в числовой JavaScript_тип, а не в строку, как можно было бы ожидать.

 

 

Рис. 12.2. Преобразование данных при чтении Java'значений в JavaScript'сценариях

1 Имеется в виду, что с него «снимается» обертка JavaObject и «остается» ссылка на Java_объект. – Примеч. науч. ред.


 

248 Глава 12. Разработка сценариев для Java*приложений

• Экземпляры java.lang.Double, java.lang.Integer и аналогичных им классов не преобразуются в JavaScript_числа. Подобно любым другим Java_объектам, они преобразуются в объекты JavaObject.

• Строки в языке Java являются экземплярами класса java.lang.String, поэто_ му, подобно любым другим Java_объектам, они преобразуются в объекты JavaObject, а не в JavaScript_строки.

• Java_массивы любого типа в JavaScript преобразуются в объекты JavaArray.

 



<== предыдущая лекция | следующая лекция ==>
Класс JavaArray | Преобразование JavaObject в JavaScript


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.611 сек.