我正在使用一个将标识符作为字符串传递的Java API。对我来说使用类型符号似乎更好一些,所以我写了这个:
object Helpers {
implicit def actionToString(action: Action): String =
action.getClass.getName.stripSuffix("$").replaceAll(".*\\$", "")
object Action{
def apply(name: String): Action = {
Class.forName("tutorial.HelloInput$Helpers$" + name).newInstance()
.asInstanceOf[Action]
}
}
sealed abstract class Action {
override def toString: String = actionToString(this)
}
final case class Rotate() extends Action
final case class Right() extends Action
final case class Left() extends Action
final case class Pause() extends Action
}
这允许以自然的方式对字符串和动作进行“序列化”和“反序列化”,例如,我可以在 上进行模式匹配Action(Pause)
,但由于隐式转换,我也可以传递Pause()
给期望字符串的 Java 库。
有没有更好的方法来做到这一点,尤其是在性能方面?这种方法有什么问题可能会回来咬我吗?
我在 Dotty 中阅读了一些关于 Phantom 类型的信息,想知道它们是否可以用来提高处理符号的性能(或者新的 Enums 可能是更好的选择)。