Scala中trait方法的参数默认值不被识别编译报错问题
问题原因
Scala解析方法调用参数时默认遵循按位置匹配规则,不会自动跳过携带默认值的参数:
你定义的方法签名为def myMethod(entity: Entity = null, name: String),第一个参数是Entity类型,第二个才是String类型。当你调用t.myMethod("John")时,编译器会按位置把入参"John"匹配给第一个参数entity,而entity要求的是Entity类型,自然就会抛出类型不匹配的错误。
解决方案
有两种常用的修复方式:
- 调用时显式指定参数名,告诉编译器你传入的值对应哪个参数:
这种写法下编译器会自动为没有传值的t.myMethod(name = "John")entity参数使用默认的null值。 - 调整方法参数顺序,将带有默认值的参数放到参数列表的末尾:
调整后调用trait myTrait { def myMethod(name: String, entity: Entity = null) }t.myMethod("John")时,编译器会按位置把"John"匹配给第一个String类型的name参数,第二个参数自动使用默认值,不会触发类型错误。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

