如何将Java字节数组转换为Scala字节数组?

如何将Java字节数组转换为Scala字节数组?,java,scala,bytearray,Java,Scala,Bytearray,我是Scala新手,目前正在从事一个涉及Java和Scala模块的项目。现在我想使用byte[]类型的参数从Java调用Scala方法 Scala方法的签名为:def foo(数据:Array[Byte]) Java调用如下所示:foo(x),其中x的类型为byte[] IDE告诉我这是不可能的: The method foo(Array) in the type Bar is not applicable for the arguments (byte[]) 作为附加约束,不建议更改Scal

我是Scala新手,目前正在从事一个涉及Java和Scala模块的项目。现在我想使用byte[]类型的参数从Java调用Scala方法

Scala方法的签名为:
def foo(数据: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[]
,但这并没有解决问题。一定存在一些转换?

我试图重现您的错误,但它按预期运行。 使用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)
}
输出:[B@6ef38f6f


这是编译和运行的。这不是您要问的吗?请随意评论。

正如其他人所指出的,转换过程中没有问题。我的IDE行为错误,并且显示了编译时没有问题的假想错误。此时,以下代码中主方法中receive方法的调用被标记为err或:

The method receive(Array) from the type ScalaByteReceiver refers to the missing type Array 斯卡拉:

包堆栈溢出
导入堆栈溢出_
类ScalaByteReceiver{
def接收(字节:数组[Byte]){
println(字节长度);
//印刷品4
}
}

因此Java和Scala彼此非常了解。

您使用的是什么IDE?Intellij没有问题。您使用的是2.8或更高版本吗?
Array[Byte]
is
Byte[]
从2.8开始,如果您的IDE抱怨您的IDE是错误的。我正在使用Eclipse Helios 3.6.2,并安装了用于Eclipse 2.0.0-beta4的Scala IDE。该项目是在Maven模块中组织的,Scala和Java模块都将Scala-library-2.9.0作为Maven依赖项。我注意到Scala IDE有时会做一些奇怪的事情,比如sh由于package explorer中出现了假想的警告和错误,但通常清理和重建项目会有所帮助(我已经在本例中尝试过了)。嗯,这很有趣:使用x类型(原始)
scala.Array
从Java调用
foo(x)
。让我的IDE返回:
方法foo(字节[])在类型栏中不适用于参数(数组)
。这就是我所说的矛盾行为。我应该尝试在其他地方编译代码……”“这不是你所问的吗?”-几乎:)…你将Scala
Array[Byte]
传递给一个Java(构造函数)方法,该方法需要
Byte[]
,我一直在寻找另一个方向的解决方案。但您成功地证明了这一点。我确信我的IDE行为错误,事实上转换似乎没有问题。我实现了一个工作示例,我将在第二秒内发布,该示例标记为错误,但编译并生成预期的r但是谢谢你的代码,我冒昧地把它作为工作示例的基础。