首页 > 解决方案 > 当我将对象放入值时,scala Map中的编译时间错误

问题描述

我有一个包含两个 Scala 对象作为值和唯一字符串的 Map。

val vv = Map("N"-> Nconstant, "M"-> Mconstant) 

这里NconstantandMconstant是两个具有常量值的对象。之后,我尝试通过传递下面的键来访问该对象内的常量变量,

val contract = vv("N").contractVal 

contractVal是具有值并且在 和 内的Mconstant变量Nconstant。但 IntelliJ 正在展示

“无法解析符号 contractVal”。

任何人都可以帮助解决这个问题吗?

标签: scala

解决方案


作为蒂姆答案的补充,如果您的类型具有公共字段但没有公共类型,那么您可以使用鸭子类型

object Nconstant {
  val contractVal = "N"
}

object Mconstant {
  val contractVal = "M"
}

val vv = Map("N"-> Nconstant, "M"-> Mconstant, "X" -> Xconstant)

import scala.language.reflectiveCalls

vv("N").asInstanceOf[{ val contractVal: String }].contractVal //N

但请注意,如果 N 没有真正的contractVal字段,它将在运行时失败!


推荐阅读