W typowych klasach możesz utworzyć klasę niejawną, aby dodać nowe metody do innych instancji klas, tak jak poniżej:
implicit class IntWrapper(i: Int) {
def otherMethod(s: String) = println(s"i: ${i} with ${s}")
}
teraz możesz to zrobić
3.otherMethod("something")
Moje pytania są
czy można dodać metodę do the(Odpowiedzi tutaj)Int
companion object
?Wyobraź sobie, że istnieje Java
enum
zdefiniowany z twojego projektu i używasz go w kodzie Scala. Jawaenums
mieć.valueOf(s: String)
metoda, która pobiera wartość wyliczenia z aString
, ale to rzucaIllegalArgumentException
. Chciałbym dodać metodę.safeValueOf(s: String)
które zwróciOption
.Czy można dodać tę metodę do Java
enum
w taki sam sposób jak w pierwszym przykładzie?
Odpowiedzi:
1 dla odpowiedzi № 1Oto co ty mogą zrobić dla 2 (przybliżony, niesprawdzony):
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
}
Stosowanie: SafeValueOf[MyEnum]("something")
.