2016-12-11 16 views
0

を通じてコン​​パニオンオブジェクトにメソッドを追加し、あなただけのように、他のクラスのインスタンスに新しいメソッドを追加するために、暗黙的なクラスを作成することができます。は、典型的なクラスと暗黙

implicit class IntWrapper(i: Int) { 
    def otherMethod(s: String) = println(s"i: ${i} with ${s}") 
    } 

今は

3.otherMethod("something") 
を行うことができます

私の質問は

  1. までにメソッドを追加することが可能ですされていますcompanion objecthereを回答)

  2. は、プロジェクトの外に定義されたJava enumあります想像して、あなたのScalaのコードでそれを使用しています。 Java enumsStringから列挙値を取得するが、IllegalArgumentExceptionをスローする方法は.valueOf(s: String)です。 Optionを返すメソッド.safeValueOf(s: String)を追加したいと思います。

    最初の例と同じ方法で、このメソッドをJava enumに追加することはできますか?ここで

+0

私はそれが可能ではないと思います。 Java enum自体は値ではありません。それで、それは変換することはできません。 –

答えて

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")

関連する問題