scala调用java带有可变参数的函数传数组解析错误问题解决办法
2019-01-12 10:25
567 查看
scala调用java含数组的函数
scala中的数组用Array,对应于java中的数组类型,所以在scala中调用java含数组的函数时,直接传Array,直接调用,隐式转换即可解析成java数组形式。但是当在调用java中含可变参数的函数时,会发生错误,Array解析成了只有一个对象(对象中包含Array数组)的数组,不符合预期,解决方案可以通过再封装一个函数用java数组接一下,从java代码调用带可变参数的函数。
举例说明如下java函数所示:
public void varP(Object... values){ for (int i = 0; i < values.length; i ++){ System.out.println(values[i]); } }
scala直接调用如下,打印结果为:[Ljava.lang.Object;@687080dc
val arrayTest = new Array[Object](2) arrayTest(0) = "0" arrayTest(1) = "1" byteR.varP(arrayTest)
values的值显示如下:
以上明显不符合预期。
解决方案:
1.调用函数参数加个_*,如下
val arrayTest = new Array[Object](2) arrayTest(0) = "0" arrayTest(1) = "1" byteR.varP(arrayTest: _*)
2. 或者增加了中转函数,如下:
public void varP2(Object[] values){ varP(values); } public void varP(Object... values){ for (int i = 0; i < values.length; i ++){ System.out.println(values[i]); } }
再次调用,打印结果是0 1
val arrayTest = new Array[Object](2) arrayTest(0) = "0" arrayTest(1) = "1" byteR.varP2(arrayTest)
values的值显示如下
解决问题
相关文章推荐
- 多线程error C3867: 函数调用缺少参数列表问题解决办法:
- Java调用.Net WebService问题,以及参数为空解决办法
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- 从sql库里读取二进制图片的问题 (参数无效 未处理ArgumentException 错误的解决办法)
- w7 下配置IIS ,出现的IIS 7.5 HTTP 错误 404.3 - Not Found解决办法及 调用32位动态库问题
- Android问题集锦之八:调用其他程序中的activity和Permission Denial: starting Intent 错误解决办法
- JavaScript调用传递变量参数的相关问题及解决办法
- Java在Windows平台上调用进程不传参的问题解决办法
- 有关java的函数调用返回值的问题和参数传递问题
- Java可变长参数方法调用问题
- MFC调用带有结构体形参的dll库, 参数传入函数里面获取的值全部错误<为系统默认值>
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- C#关于静态函数与普通函数之间的调用问题,以及可变参数的使用
- java调用oracle中输入参数是数组类型的函数或者存储过程
- 深度解析Java可变参数类型以及与数组的区别
- C和指针之实现可变参数函数编译出现expanded from macro 'va_arg' #define va_arg(ap, type) 解决办法
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
- 在access的vba中循环调用带参数查询时遇到的问题及解决办法
- C语言中的可变参数宏/函数,及可变参数在函数中的传递问题全解析