如何将Java字节数组转换为Scala字节数组?
我是Scala新手,目前正在从事一个涉及Java和Scala模块的项目。现在我想使用byte[]类型的参数从Java调用Scala方法 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
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]
isByte[]
从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(字节[])在类型栏中不适用于参数(数组)
。这就是我所说的矛盾行为。我应该尝试在其他地方编译代码……”“这不是你所问的吗?”-几乎:)…你将ScalaArray[Byte]
传递给一个Java(构造函数)方法,该方法需要Byte[]
,我一直在寻找另一个方向的解决方案。但您成功地证明了这一点。我确信我的IDE行为错误,事实上转换似乎没有问题。我实现了一个工作示例,我将在第二秒内发布,该示例标记为错误,但编译并生成预期的r但是谢谢你的代码,我冒昧地把它作为工作示例的基础。