1.通配符
*在Scala 中是合法的方法名,所以导入包时使用_代替
import java.util._
//java
import java.util.*;
//Scala
import java.util._
2.类成员默认值
1)java中类成员可以不赋初始值,编译器会自动帮你设置一个合适的初始值
class function {
//String类型的默认值是 null
private String str;
}
2)在Scala中必须显示指定,也可以使用 _ 让编译器帮你设置初始值
即: var s:String = _
class Function{
//String类型的默认值为null
var str:String =_
}
语法只适用于类成员,而不适用于局部变量
3.可变参数
Java声明可变参数如下:
public static void prints(String...args){
for(Object ele:args){
System.out.println(ele + " ");
}
}
调用方法如下:
//传入两个参数
prints("a","b");
//也可以传入一个数组
prints(new String[]{"a","b"});
在Java中可以直接将数组传给prints方法,但是在Scala中,你必须要明确的告诉编译器,你是要将集合作为一个独立的参数传进去,还是想将 集合的元素传进去,如果是后者则更要借助下划线:
prints(List("a","b"):_*)
4.类型通配符
Java的反省系统有一个通配符类型,例如List<?>,任意的List类型都是List<?>的子类型,如果我们先更便携一个可以打印所有List类型元素的方法,可以声明如下:
public static void printList(List<?> list){
for(Object ele: list){
System.out.println(ele +" ");
}
}
对应Scala版本:
def printList(list : List[_]): Unit = {
list.foreach(ele => println(ele + " "))
}
5.模式匹配
5.1默认匹配
//匹配以0开头,长度为3的列表
str match{
case List(0,_,_)=>println("found it")
case _ =>
}
5.2匹配集合元素
//以匹配0开头,长度为三的列表
expr match {
case List(0,_,_) => println("found it")
case _ => println("其他")
}
//以匹配0开头,长度任意的列表
expr match {
case List(0,_*) => println("found it")
case _ =>
}
//匹配元素元素
expr match{
case (0,_) => println("found it")
case _ =>
}
// 将首元素赋值给head变量
val List(head,_*)=List("a")