开发者学堂课程【Scala 核心编程 - 进阶:ArrayBuffer 转 Java 的 List】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9028
ArrayBuffer 转 Java 的 List
内容介绍:
一、Scala 数组转 Java 的 List
二、补充知识
一、Scala 数组转 Java 的 List
Scala 可以调用 JAVA 里面的集合,在开发中由于历史的原因,Scala 的发展是基于JAVA 的,它底层的代码是一点点进行升级的,有的在1.0版本的时候运用的JAVA就比较多一些,等他升级了以后,但慢慢的 Scala 的部分就会越来越多,在其中可能会涉及到 Scala 和 JAVA 的调用。
一旦把数组转成 list,再转成 JAVA 的其他类型,就比较容易了。Array 如果能够直接提供转换那就直接用,如果没有,那就把 array 先转成 ArrayBuffer 再转成其他,这条线就通了。
在项目开发中,有时我们需要将 Scala 数组转成 Java 数组,看下面案例:
//Scala 集合和 Java 集合互相转换
创建新的 Scala class,Name 为 ArrayBuffer2JavaList,Kind 为 Object。
object ArrayBuffer23avaList {
def main(args: Array [string]: unit = {
/
/ scal
a集
合和
J
ava集合互相转换
val arr = ArrayBuffer("1","2"","3"")
/*
implicit def bufferAsjavaList[A](b : scala.collection.mutable.Buffer[A]) :java. util.List[A] -{ /* compiled code */ }
*/
import scala.collection.JavaConversions.bufferAsJavaList
点 bufferAsJavaList 进去显示 implicit def bufferAsJavaList[A](b : scala.collection.mutable.Buffer[A]): java.util.List[A] = {/*compiled code */ }
(此处用到隐式转换,bufferAsJavaList 是 implicit 的一个隐式函数,它可以接收scala.collection.mutable.Buffer 数据类型,可变的 buffer,联想相关的图,只要是 buffer 的子类,就可以传过去,返给 java.util.List)
//对象 ProcessBuiLder,此处用的是它本身的构造器,追进去发现它可以接收 list,它返回了一个 command,隐式转换可以将其转换过去,本身 ArrayBuffer 是转不过去的,但是提供了隐式函数之后就可以进行转换。隐式函数的出发点是参数类型不一致,这里做一个工作,是 ArrayBuffer 转成 List,因为这里使用到上面的bufferAsJavaList,它把 ArrayBuffer 转为 list 传入,主要目的是调用 command 返回一个 JAVALIST
val javaArr = new ProcessBuilder(arr)//为什么可以这样使用?
//这里 arrList 就是 java 中的 List
首先在这里输入 arrlist,command 返回一个 list
val arrList = javaArr.command(
)
println(arrList)//输出[1,2,3]
原先是1,2,3,现在是 JAVA list[1,2,3]
二、补充知识
如果有一个 A 类,它继承了一个特质,这个A类的实例就可以传给Mytrat,在JAVA里面,如果一个类实现一个接口,就可以把这个类的实例传给接口的引用,这个地方也是一样的。
trait MyTrait01
{}
classA extends MyTrait01
{}(A 继承了 Trait)
object B {
def test(m: MyTrait01): Unit ={
(test 方法可以接受 MyTrait 引用)
println("b ok..")
}
}
//明确一个知识点
//当一个类继承了一个 trait
//那么该类的实例,就可以传递给这个trait引用
//测试:
val a01 = new A
(创建一个A对象)
B.test(a01)
补充了一个多态(使用trait来实现的参数多态)的知识点