在从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类编写代码包装程序是无效的。
答案 0 :(得分:2)
JavaObj不是通向动态Java编码的通用桥梁。它是使用SAS合适的方法签名来连接非常简单的Java类的桥梁,或者实际上是使用为特定角色构建的定义良好的适配器类的桥梁。
HASH
对象很可能可以用来维护集合JavaObj
的引用,但这已经陷入了深渊。
对于SAS中的通用Java编码,请查看Proc GROOVY
。
关于JavaObj的会议论文很多,将其搜索出来。如果您是一个狂热的读者,请尝试2005 paper“SAS®中的Java:JavaObj,DATA步骤组件对象”
JavaObj的设计创建了许多情况,这些情况需要适配器Java类才能充分利用库的功能。
Java DATA步骤图形界面-JavaObj可访问的Java类和SAS宏的组合,可让您创建几乎任何类型的静态2D可视化
如今,您可能会改用HTML 5画布。
答案 1 :(得分:1)
SAS Base can not中的数组由Java对象元素组成:
所有元素必须是字符或数字。