使用容器时将 Scala 字节转换为 java 字节
Convert scala byte to java byte when using containers
我需要调用 java api 来处理字节序列
public class JBytes {
public static void single(Byte b) {
}
public static void array(byte[] arr) {
}
public static void iterable(Iterable<Byte> it) {
}
}
来自 scala
import scala.collection.JavaConverters._
class SBytes {
val b: Byte = ???
val arr: Array[Byte] = ???
val iter: Iterable[Byte] = ???
JBytes.single(b)
JBytes.array(arr)
JBytes.iterable(iter.asJava) // Compiler fails with found: Iterable[scala.Byte] required: Iterable[java.lang.Byte]
JBytes.iterable(iter.map(_.asInstanceOf[java.lang.Byte]).asJava) // works
}
我可以不使用 instanceOf[java.lang.Byte] 吗?
使用java.lang.Byte
的valueOf
方法class
另一种是简单地声明类型注释
scala> val a: Byte = 1
a: Byte = 1
scala> val b: java.lang.Byte = a
b: Byte = 1
scala> b.getClass
res6: Class[_ <: Byte] = class java.lang.Byte
b
现在是 java.lang.Byte
Scala REPL
scala> :paste
// Entering paste mode (ctrl-D to finish)
implicit class ByteOps(v: Byte) {
def toJavaByte: java.lang.Byte = java.lang.Byte.valueOf(v.toString)
}
// Exiting paste mode, now interpreting.
defined class ByteOps
scala> val a: Byte = 1
a: Byte = 1
scala> a.toJavaByte
res4: Byte = 1
我需要调用 java api 来处理字节序列
public class JBytes {
public static void single(Byte b) {
}
public static void array(byte[] arr) {
}
public static void iterable(Iterable<Byte> it) {
}
}
来自 scala
import scala.collection.JavaConverters._
class SBytes {
val b: Byte = ???
val arr: Array[Byte] = ???
val iter: Iterable[Byte] = ???
JBytes.single(b)
JBytes.array(arr)
JBytes.iterable(iter.asJava) // Compiler fails with found: Iterable[scala.Byte] required: Iterable[java.lang.Byte]
JBytes.iterable(iter.map(_.asInstanceOf[java.lang.Byte]).asJava) // works
}
我可以不使用 instanceOf[java.lang.Byte] 吗?
使用java.lang.Byte
的valueOf
方法class
另一种是简单地声明类型注释
scala> val a: Byte = 1
a: Byte = 1
scala> val b: java.lang.Byte = a
b: Byte = 1
scala> b.getClass
res6: Class[_ <: Byte] = class java.lang.Byte
b
现在是 java.lang.Byte
Scala REPL
scala> :paste
// Entering paste mode (ctrl-D to finish)
implicit class ByteOps(v: Byte) {
def toJavaByte: java.lang.Byte = java.lang.Byte.valueOf(v.toString)
}
// Exiting paste mode, now interpreting.
defined class ByteOps
scala> val a: Byte = 1
a: Byte = 1
scala> a.toJavaByte
res4: Byte = 1