对于典型的类,您可以创建一个隐式类来将新方法添加到其他类实例,如下所示:
implicit class IntWrapper(i: Int) {
def otherMethod(s: String) = println(s"i: ${i} with ${s}")
}
现在你可以做到
3.otherMethod("something")
我的问题是
是否可以向(已回答here)Int
companion object
添加方法?
想象一下,您的项目中定义了一个Java enum
,并且您在Scala代码中使用它。 Java enums
使用.valueOf(s: String)
方法从String
获取枚举值,但会抛出IllegalArgumentException
。我想添加一个返回.safeValueOf(s: String)
的方法Option
。
是否可以像在第一个示例中那样将该方法添加到Java enum
?
答案 0 :(得分:1)
以下是可以为2做的事情(近似,未经测试):
import scala.reflect.ClassTag
import scala.util.Try
object SafeValueOf {
def apply[E <: Enum[E]](s: String)(implicit tag: ClassTag[E]): Option[E] =
Try(Enum.valueOf(tag.runtimeClass.asInstanceOf[Class[E]], s)).toOption
}
用法:SafeValueOf[MyEnum]("something")
。