同名同位置默认参数不能overload
def bar(i:Int,s:String="a"){}
def bar(i:String,s:String="b"){}
编译错误: .... multiple overloaded alternatives of method bar define default arguments.
因为scala编译后,按默认的参数位置,生成这样的方法,导致重载冲突。
public String bar$default$2() {return "a";}
public String bar$default$2() {return "b";}
解决方案:部分解决,类似java的重载。
def bar(i:Int,s:String){}
def bar(i:String,s:String){}
def bar(i:Int) = bar(i,"a")
def bar(i:String) = bar(i,"b")