java.lang.Integer cannot be cast to java.lang.String; scala 中和java 间的类型转换

如下代码会报错:java.lang.Integer cannot be cast to java.lang.String

val j:java.lang.Integer=1
j.toString//报错java.lang.Integer cannot be cast to java.lang.String
 j.asInstanceOf[String]//报错java.lang.Integer cannot be cast to java.lang.String

解决办法,引入 scala.collection.JavaConverters._

两种方式来完成集合类型在 Scala 与 Java 间的转换

scala.collection.JavaConversions._ 自动转型,Scala 2.8 加入的。隐式转型可能会造成阅读上的障碍,可能会让人难以知晓什么变成了什么
scala.collection.JavaConverters._ 然后再调用 asJava/asScala 方法半自动转型(自动部分在生成 AsJava/AsScala 中间实例)。Scala 2.8.1 加入,稍新, asJava/asScala 为我们标记出了实际转型的地方,以及从哪个方向到哪个方向


//java转换为scala,调用to*方法进行转换
import scala.collection.JavaConverters._

val j:java.lang.Integer=1
 j.toString//ok
 j.asInstanceOf[String]//报错java.lang.Integer cannot be cast to java.lang.String,因为scala的string就是java.lang.String
 
//scala数据类型转化为java数据类型
import scala.collection.JavaConverters._

val l = List(1L,2L,3L,4L)

l.map(java.lang.Long.valueOf).asJava
// or 
l.map(_.asInstanceOf[AnyRef]).asJava
// or
l.map(Long.box).asJava

// List集合转换
val jl : java.util.List[Int] = new scala.collection.mutable.ListBuffer[Int].asJava

//scala转scala
//1.String 转Int
val i : Int = Integer.parseInt("1")
//2.Int | boolean转String
val str: String = String.valueOf(1)
val str1 = String.valueOf(true)

//3.强制转换 用法:对象名.asInstanceOf[类型]
val b : A = new B
//强制转换
val c : B = b.asInstanceOf[B]
//父类  
class A
//子类
class B extends A

参考:
https://docs.scala-lang.org/overviews/collections/conversions-between-java-and-scala-collections.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值