scala调用java带有可变参数的函数传数组解析错误问题解决办法

本文介绍在Scala中调用Java含可变参数函数的常见问题及解决方法,包括使用Array传递参数的错误解析及正确做法,通过示例展示如何避免Array被误解析,确保函数调用符合预期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的值显示如下
在这里插入图片描述

解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值