您的位置:首页 > 编程语言 > Java开发

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的值显示如下

解决问题

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐