2016-12-11 7 views
0

, 당신은 다른 클래스 인스턴스에 새로운 방법을 추가하는 암시 적 클래스를 만들 수 있습니다 implicits을 통해 동반자 객체에 메서드를 추가단지 다음과 같이 일반적인 클래스와

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

은 당신이 할 수있는

3.otherMethod("something") 

내 질문

  1. 는로하는 방법을 추가 할 수 있습니다companion object? (답변 됨 here)

  2. 프로젝트에서 정의한 Java enum이 있고 이것을 스칼라 코드에서 사용하고 있다고 가정 해보십시오. Java enumsString에서 열거 형 값을 가져 오는 .valueOf(s: String) 메서드를 가지고 있지만 IllegalArgumentException을 던집니다. 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").