2010-01-29 5 views
3

2.7에서 scala 2.8로 프로젝트를 변환하려고하는데 자바와 상호 작용하는 코드에 어려움이있다. 다음은 문제를 표시하는 약간 복잡한 샘플 코드입니다. 본질적으로 유형이 mutable.Map[K,V] 인 멤버 변수가있는 클래스가 있고 java.util.Map[K,V]을 예상하는 메서드로 전달할 수있는 방법을 찾을 수 없습니다. 어떤 도움이라도 좋을 것입니다.scala 2.8 자바 콜렉션 변환을 암시

scala> import scala.collection.JavaConversions._ 
import scala.collection.JavaConversions._ 

scala> class A[K,V](m : collection.mutable.Map[K,V]) { 
    | def asJava : java.util.Map[K,V] = m 
    | } 

<console>:9: error: could not find implicit value for parameter ma: scala.reflect.ClassManifest[K] 
     def asJava : java.util.Map[K,V] = m 

답변

5

난 당신이 JavaConversions에서 변환을 반복하려고하는 이유를 모르겠지만, 난 당신이 요청 암시 적 매개 변수 ma 추가와 함께 할 수 있다고 생각 :에서

import scala.collection.JavaConversions._ 
class A[K,V](m : collection.mutable.Map[K,V]) { 
def asJava(implicit ma:ClassManifest[K]) : java.util.Map[K,V] = m 
} 

을 콘솔

scala> import scala.collection.JavaConversions._ 
class A[K,V](m : collection.mutable.Map[K,V]) { 
def asJava(implicit ma:ClassManifest[K]) : java.util.Map[K,V] = m 
} 
import scala.collection.JavaConversions._ 

scala> 
defined class A 

scala> val map=scala.collection.mutable.HashMap[Int, Int]() 
map: scala.collection.mutable.HashMap[Int,Int] = Map() 

scala> map += 0->1 
res3: map.type = Map(0 -> 1) 

scala> val a=new A(map) 
a: A[Int,Int] = [email protected] 

scala> a.asJava 
res4: java.util.Map[Int,Int] = {0=1} 
+0

감사합니다. Patrick. 그것은 완벽하게 작동했습니다. 나는 전환을 반복하려고하지 않고있다. 그 예는 내가 가진 문제를 보여주는 가장 쉬운 방법이었다. – Dave

5

Easi LY의 풀 수 :

class A[K : ClassManifest,V](m : collection.mutable.Map[K,V]) { 
    def asJava : java.util.Map[K,V] = m 
} 

비록, 언급 한 바와 같이, 당신은 당신이 JavaConversions에서 직접 전화 또는 암시 적으로 사용할 수있는이 방법을, 복제 귀찮게하는 이유에 대한 질문을 구걸한다. 물론 좋은 이유가있을 수도 있습니다. 스칼라 2.7에서 변환이 어떻게 작동했는지 알아보기 위해 수행했을 수도 있습니다.

+1

평소대로 똑똑 +1 – Patrick