Как создать массив Java-объектов из оператора SAS Base javaobj? - PullRequest
4 голосов
/ 24 марта 2019

Я столкнулся с проблемой при объявлении объектов Java из SAS.Нет никакого способа установить в качестве параметра массив объектов Java или создать объект массива.

data _NULL_;
/*With primitive types work well     */
  declare javaobj jArr("java.util.Arrays");
  array primeNum{3} (15, 2, 3);
  jArr_rc1=jArr.callStaticVoidMethod("sort", primeNum);

/* For example, try to create array from some javaobjs   */
  declare javaobj num1("java.lang.Integer","15");
  declare javaobj num2("java.lang.Integer","2");
  declare javaobj num3("java.lang.Integer","3");
  array Num{3} (num1,num2,num3);
/* ERROR: Cannot create an array of objects. */
/* ERROR: DATA STEP Component Object failure.  Aborted during the COMPILATION phase. */

/*In my project I've tried different ways:   */
/*     ...callStaticVoidMethod("FuncFromStandartClass",[num1,num2,num3]); */
/*     ...callStaticVoidMethod("FuncFromStandartClass",{num1,num2,num3}); */

/* This code also didn't work*/
/*declare javaobj numArr("java.lang.Integer[]","3","4");*/
run;

Я понимаю, что в отдельных случаях я должен создать код Java-оболочки, который будет проходить через только примитивы API,Но это не всегда возможно.И писать код-упаковщик для всех нужных вам классов Java неэффективно.

Ответы [ 2 ]

3 голосов
/ 24 марта 2019

JavaObj не является общим мостом для динамического кодирования Java.Это мост либо к очень простым Java-классам с подходящими сигнатурами SAS, либо, более реалистично, мост к четко определенному классу адаптера, созданному для конкретной роли.

Объект HASH, вероятно, может использоваться для поддержкиколлекция JavaObj ссылок, но это довольно глубоко.

Для Java-кодирования общего назначения в SAS, посмотрите Proc GROOVY.

. Существует довольно много конференций по JavaObj.найдите их.Если вы любите читать код 2005 paper"Java в SAS®: JavaObj, объект компонента шага DATA"

Проект JavaObj создает множество ситуаций, требующих адаптераКласс Java, чтобы полностью использовать возможности библиотеки.

и пример кода .

Графический интерфейс шага Java DATA - комбинация доступных JavaObj классов Java и макросов SAS, которые позволяют создавать практическилюбой тип статической 2D-визуализации

В настоящее время вы можете использовать холст HTML 5 вместо этого.

2 голосов
/ 24 марта 2019

Массивы в SAS Base не могут состоять из элементов объекта Java:

Все элементы должны быть символьными или числовыми.

...