Створення об’єктів

Ви можете створювати обєкти Java всередині реалізацій рідних методів за допомогою функції execute_java_constructor:

HObject *execute_java_constructor(ExecEnv *ee, char *className, ClassClass *classObj, char *signature, ..)

Створює новий обєкт зазначеного типу, що задається одним з двох параметрів className або ClassObj (Не використовуваних параметр повинен бути рівний NULL) Для створення обєкта викликається конструктор, описуваний рядком signature За параметром signature слідують параметри конструктора

Наприклад, створення нового обєкта типу Simple за допомогою безаргументний конструктора класу відбувається наступним чином:

execute_java_contructor(NULL, &quotSimple&quot, NULL, &quot()&quot)

У даному випадку сигнатура конструктора виглядає тривіально Щоб скористатися конструктором, який отримує один або декілька параметрів, необхідно включити їх типи в сигнатуру, і помістити їх значення в потрібному порядку після рядка сигнатури Типи в рядку сигнатури аналогічні тим, які повертаються ClassgetName, І використовують Односимвольні скорочення для примітивних типів Застосовуються такі скорочення:

Z boolean

I  int

C char J  long B byte F  float S short

D double

Щоб уникнути конфліктів між іменами класів / інтерфейсів і цими літерами, типи обєктів отримують імена виду Ltype&quot , Де type – Повне імя класу або інтерфейсу, в якому роздільники-точки замінюються косою рисою, а в кінці ставиться крапка з комою Наприклад, параметр, що представляє собою обєкт String, Буде виглядати як Ljava/lang/String&quot   Для масивів вказується тип масиву з префіксом [ так, масив значень типу long буде мати тип [J&quot У багатовимірних типах використовуються кілька квадратних дужок Масив String[][] виглядатиме як [[Ljava/labg/String&quot  

Якщо вам все ж незрозуміло, як вказати конкретний тип в такій рядку, ви можете написати клас Java, що створює обєкт потрібного типу, і викликати для нього метод getClass()getName() Потім, якщо отримане імя є імям типу, замініть всі точки на /, Поставте L спереду і ззаду, якщо ці символи відсутні

Аргументи, які являють собою обєкти, передаються у вигляді покажчиків на дескриптори

Нижче показано, як відбувається створення двох обєктів Attr перший з них використовує конструктор з одним аргументом, яким передається тільки імя, а другий – конструктор з двома аргументами, якому повідомляється початкове значення

oneArgAttr = (struct HAttr *)

execute_java_constructor(EE(), &quotAttr&quot, NULL, &quot(Ljava/lang/String)&quot, attrStr)

twoArgAttr = (struct HAttr *)

execute_java_constructor(EE(), &quotAttr&quot, NULL, &quot(Ljava/lang/StringLjava/lang/Object)&quot, attrStr, attrStr)

Крапка з комою виконує функцію термінатора (завершального символу) типу, а не роздільник параметрів Конструктор, який одержує два параметри типу long і два параметри типу double, Описується рядком (JJDD)&quot

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*