如何为我的Scala类定义强制转换和隐式强制转换操作?

Iva*_*van 2 casting scala implicit implicit-cast implicit-conversion

例如,我想让它以设置jDName为"John Doe"和jDAge32的方式工作:

case class Person(name : String, surname : String, age : Int)

val johnDoe = Person("John", "Doe", 32)

val jDName : String = johnDoe

val jDAge : Int = johnDoe
Run Code Online (Sandbox Code Playgroud)

我可以在Person类中编写函数来提供对String,Int和其他(自定义)类型的隐式转换吗?另一件事是显式的强制转换操作 - 也很有趣,但我不确切地知道如何在Scala中编写这个例子.

pr1*_*001 9

这会有用吗?

object Person {
  implicit def pToString(p: Person) = p.name + " " + p.surname + ", age " + p.age
  implicit def pToInt(p: Person) = p.age
}
import Person._
Run Code Online (Sandbox Code Playgroud)

  • @Ivan你不能把它们放在类本身,因为没有什么可以是"静态的",类中的所有内容都限定在实例中.你想要的是更通用的范围.在上面的示例中,这是伴随对象Person,因此在处理实例类Person时的范围. (2认同)
  • 对不起,伊万,但你为什么把丹尼尔的答案标记为答案,而不是我的答案.它们完全相同,我的第一个.那好吧!=) (2认同)