java - 使用容器时将 scala 字节转换为 java 字节

标签 java scala interop

我需要调用使用字节序列的java api

public class JBytes {
    public static void single(Byte b) {
    }

    public static void array(byte[] arr) {
    }

    public static void iterable(Iterable<Byte> it) {
    }
}

来自斯卡拉

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方法

另一种是简单地声明类型注释

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 - 使用容器时将 scala 字节转换为 java 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877155/

相关文章:

java - 如果输入中包含数组中的某些内容,如何用数组中的元素替换输入中的字符串序列?

c# - 外部应用程序使用共享内存接收消息但没有包含数据

.net - 64 到 32 位互操作 - 如何?

java - 对数组进行快速排序并在 Java 中进行二进制搜索

java.io.IOException : The document has no pages

java - 自定义 Jackson 解串器获取当前字段类的访问权限

java - 解析嵌套 avro 文件

scala - 基于类的类型参数使用 Poly1 在方法中映射 HList

返回匿名对象的 Scala 函数?

c# - 同一 COM 库中的 C++ 和 C# 类