如何将Java字节数组转换为Scala字节数组?
我是Scala的新手,目前正在参与涉及Java和Scala模块的项目。 现在我想使用byte []类型的参数从Java调用Scala方法。
Scala方法有签名: def foo(data: Array[Byte])
Java调用如下所示: foo(x)
,其中x的类型为byte[]
。
IDE告诉我它不可能:
The method foo(Array) in the type Bar is not applicable for the arguments (byte[])
作为附加约束,不优选更改Scala方法。 在Java方面,我尝试使用Byte[]
,但这并没有解决问题。 必须存在一些转换?
正如其他人所指出的,转换没有问题。 我的IDE表现错误,并显示编译没有问题的假想错误。 此时,以下代码中main方法中receive方法的调用标记为错误:
从ScalaByteReceiver类型接收(Array)的方法是指缺少的类型Array
但是,这个代码,我的问题,编译好,并产生预期的结果:
Java的:
package stackOverflow; public class JavaByteSender { public static void main(String... args) { new ScalaByteReceiver().receive(new byte[4]); } }
斯卡拉:
package stackOverflow import stackOverflow._ class ScalaByteReceiver{ def receive(bytes: Array[Byte]) { println(bytes.length); // prints 4 } }
所以Java和Scala很好地相互理解。
我试图重现你的错误,但它按预期运行。 使用scala 2.9.0和sbt运行
java代码:
package stackOverflow; public class ByteContainer { private byte[] bytes; public ByteContainer(byte[] bytes){ this.bytes = bytes; } public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; } }
斯卡拉码:
package stackOverflow import stackOverflow._ class ScalaByte{ val bytes:Array[Byte] = "this is my test".getBytes() } object ByteUser extends App{ val b = new ByteContainer((new ScalaByte()).bytes) val s = b.getBytes() println(s) }
输出:[B @ 6ef38f6f
这编译并运行。 这不是你问的问题吗? 随意发表评论。