[英]How do I convert a Java byte array into a Scala byte array?
我是 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-method中receive方法的調用被標記為錯誤:
The method receive(Array) from the type ScalaByteReceiver refers to the missing type Array
但是這段代碼,它舉例說明了我的問題,編譯得很好並產生了預期的結果:
Java:
package stackOverflow;
public class JavaByteSender {
public static void main(String... args) {
new ScalaByteReceiver().receive(new byte[4]);
}
}
Scala:
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;
}
}
scala代碼:
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)
}
output:[B@6ef38f6f
這將編譯並運行。 這不是你要問的嗎? 隨時發表評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.