Scala具备给参数提供默认值的能力,这样调用者就可以忽略这些具有默认值的参数。

    1. def log(message: String, level: String = "INFO") = println(s"$level: $message")
    2. log("System starting") // prints INFO: System starting
    3. log("User not found", "WARNING") // prints WARNING: User not found

    上面的参数level有默认值,所以是可选的。最后一行中传入的参数"WARNING"重写了默认值"INFO"。在Java中,我们可以通过带有可选参数的重载方法达到同样的效果。不过,只要调用方忽略了一个参数,其他参数就必须要带名传入。

    1. class Point(val x: Double = 0, val y: Double = 0)
    2. val point1 = new Point(y = 1)

    这里必须带名传入y = 1

    注意从Java代码中调用时,Scala中的默认参数则是必填的(非可选),如:

    1. // Point.scala
    2. class Point(val x: Double = 0, val y: Double = 0)
    1. // Main.java
    2. public class Main {
    3. public static void main(String[] args) {
    4. Point point = new Point(1); // does not compile
    5. }
    6. }