Scala中自动类型转换,大多数情况下于Java中相同,子类可以自动转换为超类,超类需要手动进行向下转型。
import scala.collection.mutable.ArrayBuffer
object TypeConvert {
var result1: String = _
var result2: Any = _
var param: String = "abc"
def main(args: Array[String]): Unit = {
/*
* result = returnTypeTest()
* 直接这样写会编译失败,提示
* Expression of type Any doesn't conform to expected type String
* 需要使用asInstanceOf进行类型转换
* */
result1 = returnTypeTest1().asInstanceOf[String]
println(result1)
/* 返回为String,赋值给类型为超类的值,自动进行转换 */
result2 = returnTypeTest2()
println(result2)
/* 形参中可以自动转换为超类,超类需要使用asInstanceOf进行向下转型 */
paramTypeTest0(result2.asInstanceOf[String])
paramTypeTest1(param)
paramTypeTest2(param)
}
def returnTypeTest1(): Any = {
val str: String = "123"
str
}
def returnTypeTest2(): String = {
val str: String = "123"
str
}
def paramTypeTest0(param: String): Unit = {
println(param)
}
def paramTypeTest1(param: Any): Unit = {
println(param)
}
def paramTypeTest2(param: Object): Unit = {
println(param)
}
}
Java中给定类型的数组会自动转化为超类型的数组,例如,Java中String[]数组可以传给一个接受Object[]数组的方法
但是Scala中无法将ArrayBuffer[String]自动转换为ArrayBuffer[Any]或ArrayBuffer[Object]
import scala.collection.mutable.ArrayBuffer
object TypeConvert {
def main(args: Array[String]): Unit = {
val buffer = ArrayBuffer[String]("a", "b", "c")
/*
* Java中给定类型的数组会自动转化为超类型的数组,例如,Java中String[]数组可以传给一个接受Object[]数组的方法
* scala中无法将ArrayBuffer[String]自动转换为ArrayBuffer[Any]或ArrayBuffer[Object]
* paramTypeTest3(buffer)
* 直接这样写会编译错误,提示
* Type mismatch, expected: ArrayBuffer[Any], actual: ArrayBuffer[String]
* */
paramTypeTest3(buffer.asInstanceOf[ArrayBuffer[Any]])
//paramTypeTest4(buffer)
paramTypeTest4(buffer.asInstanceOf[ArrayBuffer[Object]])
}
def paramTypeTest3(param: ArrayBuffer[Any]): Unit = {
println(param)
}
def paramTypeTest4(param: ArrayBuffer[Object]): Unit = {
println(param)
}
}