【问题标题】:Convert scala byte to java byte when using containers使用容器时将scala字节转换为java字节
【发布时间】:2018-06-15 14:01:38
【问题描述】:

我需要调用适用于字节序列的 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 scala interop


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2011-01-22
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多