java - フィルタ - 以前 の エラー の ため に コンテキスト の 起動 が 失敗 しま した tomcat8




スカラJavaエラー:値フィルタはjava.util.Mapのメンバーではありません。 授業外の作品 (2)

問題は、scala for-comprehensionを使用するために必要なmonad api(map、flatMap、...)を実装していないJavaマップを使用していることです。

具体的には、あなたの例では、コンパイラは.filterメソッドが見つからないと不平を言っています。 これは、 entry <- monadような直接の代入ではなく(key, value) <- monad各項目を展開するためです。 しかし、直接割り当てを使用したとしても、 .mapまたは.flatMap不足していると不満を.flatMapます。 「必要なapiの詳細については、 理解のための準拠のスカラモナドを作成する方法」を参照してください。

あなたの問題を解決する最も簡単な方法は、Javaマップをスカラマップに変換することです。

import scala.collection.JavaConverters._

...
for((k,v) <- conf.asScala) ...

インポートには、javaマップに.asScalaメソッドを追加する暗黙的なものが含まれます。

EclipseでいくつかのScalaコードをリファクタリングして、このコンパイルエラーを実行しようとしています。

値のフィルタはjava.util.Mapのメンバーではありません

import java.io.File
import com.typesafe.config._

class ConfigLoader  {

    def parseFile( confFile : File) {
        val conf = ConfigFactory.parseFile(confFile).root().unwrapped();        
        for((k,v) <- conf; (dk, dv) = (k, v.toString())) config.param += (dk -> dv);        
    }

(configは "param"がString:Mapのマップであるオブジェクトです)

このコードは、Main()から正確に引っ張ってきました。

object Main extends Logging {        

    def main(args: Array[String]) {
        //code cropped for readability. 
        //config.param["properties"] is absolute path to a passed-in properties file. 

        val conf = ConfigFactory.parseFile(new java.io.File(config.param("properties"))).root().unwrapped();

        for((k,v) <- conf; (dk, dv) = (k, v.toString())) config.param+=(dk -> dv);

ご覧のとおり、コードはまったく同じです。 私は同じライブラリをインポートしました。 私が今メインで異なっているのは、 ConfigLoaderをインスタンス化し、それを次のように呼び出すことです:

cfgLoader.parseFile(config.param("properties"))

それをクラスに移動するだけでエラーを引き起こす原因は何ですか?

私はエラーを探知し、それはかなり一般的なようだ。


結局のところ、私はトリッキーなインポートを欠いていた。

import collection.JavaConversions._

私が持っていたJavaConverters._と混同しないでください。

これが他の人に役立つことを願っています