Ter*_*ced 4 scala constructor-overloading
我的系统中有遗留消息,我希望能够将新消息映射到我的系统中.
为什么我不能重载我的case类?
case class Message(a:Int, b:Int)
case class NewMessage(a:Int, b:Int, c:Int) {
def this(msg : Message) = this(a = msg.a, b = msg.b, c = 0)
}
val msg = Message(1,2)
val converted = NewMessage(msg)
Run Code Online (Sandbox Code Playgroud)
这段代码似乎没有编译.:(
Knu*_*daa 11
你正在重载构造函数,而你想要做的是重载apply方法.您可以在随播对象上执行此操作:
case class NewMessage(a: Int, b: Int, c: Int)
object NewMessage {
def apply(msg: Message) = new NewMessage(a = msg.a, b = msg.b, c = 0)
}
val converted = NewMessage(msg)
Run Code Online (Sandbox Code Playgroud)
您必须使用new运算符显式调用构造函数:
val converted = new NewMessage(msg)
Run Code Online (Sandbox Code Playgroud)
它的工作原理是因为你实际上在NewMessage普通中定义了第二个构造函数:
NewMessage(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
被翻译成:
NewMessage.apply(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2251 次 |
| 最近记录: |