0

暗黙の変換を明示的に要求する方法は scala にありますか、それともその目的のために常に関数を定義する必要がありますか?

import collection.JavaConversions._
...
def toScalaCollections( v:Any ) : Any = {
  v match {
    case v2:java.lang.Map[Any] => v2.implicitly[ scala.collection.Map[Any] ]
    case v2:java.lang.Iterable[Any] => v2.implicitly[ scala.collection.Iterable[Any] ]
    ...
  } 
}

言語に暗黙的にのような演算子はありますか?

注意。明らかに、定義することで回避できます

import collection.JavaConversions._
...
def toScalaCollections( v:Any ) : Any = {
  v match {
    case v2:java.lang.Map[Any] => toScalaMap(v2)
    case v2:java.lang.Iterable[Any] => toScalaList(v2)
    ...
  } 
}

私のポイントは、これを行う必要がないことは可能ですか?

4

2 に答える 2

2

ある時点で、これらのコレクションが Scala コレクション型である必要があることを何らかの方法で指定する必要があります。あなたの関数は type を返すのでAny、Scala はあなたの意図が Scala 型付きコレクションを返すことであることを理解する方法がありません。これは、あなたがやろうとしていることを達成するために私が知っている最も簡単な方法です:

import collection.JavaConversions._
def toScalaCollections( v:Any ) : Any = {
  v match {
    case v2:java.util.Map[Any, Any] => v2:scala.collection.mutable.Map[Any, Any]
    case v2:java.lang.Iterable[Any] => v2:Iterable[Any]
  }
}

不変マップは ではサポートされていないため、Scala の可変マップを使用したことに注意してくださいJavaConversions

于 2013-10-04T02:23:27.527 に答える