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

你可能感兴趣的:(Scala,scala,java,开发语言)