Scala动态类到内部动态类

时间:2018-08-25 05:29:46

标签: scala

我正在为scala类创建JSON。

我想要test.c.a,但错误编译失败

import scala.language.dynamics
import scala.collection.mutable

object Json extends App{

    class dynamicClass extends Dynamic {
        var map = mutable.Map[String, Any]()

        def selectDynamic(key: String) = map(key)        
        def updateDynamic(key: String)(value: Any) {             
            map(key) = value 
        }
        override def toString = map.toString()
    }

    var test = new dynamicClass
    var innerTest = new dynamicClass
    innerTest.a = "zzzz"
    innerTest.b = "asdfsdf"

    test.a = "this a"
    test.b = "this b"
    test.c = new dynamicClass

    println(test.c.a)
}

1 个答案:

答案 0 :(得分:0)

这里的问题是您有Map的{​​{1}},因此编译器不知道Anytest.c的实例,Scala是强类型的

您可以使用类型参数来告诉dynamicClass您的对象是selectDynamic的实例。完全不能使用dynamicClass,您可以将其替换为模式匹配。

asInstanceOf