如何从SAS Base javaobj语句创建对象的Java数组?

时间:2019-03-24 14:05:17

标签: sas

在从SAS声明Java对象时遇到了麻烦。 无法设置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 个答案:

答案 0 :(得分:2)

JavaObj不是通向动态Java编码的通用桥梁。它是使用SAS合适的方法签名来连接非常简单的Java类的桥梁,或者实际上是使用为特定角色构建的定义良好的适配器类的桥梁。

HASH对象很可能可以用来维护集合JavaObj的引用,但这已经陷入了深渊。

对于SAS中的通用Java编码,请查看Proc GROOVY

关于JavaObj的会议论文很多,将其搜索出来。如果您是一个狂热的读者,请尝试2005 paper“SAS®中的Java:JavaObj,DATA步骤组件对象”

  

JavaObj的设计创建了许多情况,这些情况需要适配器Java类才能充分利用库的功能。

sample code

  

Java DATA步骤图形界面-JavaObj可访问的Java类和SAS宏的组合,可让您创建几乎任何类型的静态2D可视化

如今,您可能会改用HTML 5画布。

答案 1 :(得分:1)

SAS Base can not中的数组由Java对象元素组成:

  

所有元素必须是字符或数字。