scala - 当我将对象放入值时,scala Map中的编译时间错误
问题描述
我有一个包含两个 Scala 对象作为值和唯一字符串的 Map。
val vv = Map("N"-> Nconstant, "M"-> Mconstant)
这里Nconstant
andMconstant
是两个具有常量值的对象。之后,我尝试通过传递下面的键来访问该对象内的常量变量,
val contract = vv("N").contractVal
contractVal
是具有值并且在 和 内的Mconstant
变量Nconstant
。但 IntelliJ 正在展示
“无法解析符号 contractVal”。
任何人都可以帮助解决这个问题吗?
解决方案
作为蒂姆答案的补充,如果您的类型具有公共字段但没有公共类型,那么您可以使用鸭子类型:
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
字段,它将在运行时失败!
推荐阅读
- css - 如何更改:webkit-scrollbar-thumb 的边框颜色?
- python - 编写一个程序来通读 mbox-short.txt 并计算出每条消息在一天中的小时分布
- c# - Streamwriter 日志被覆盖
- node.js - 如何处理世博会应用程序中的响应错误
- python - 使用 python 和 SQL 插入整个列表
- angular - 获取字符串格式的枚举值
- memory-management - Rust - 如何在结构中使用未调整大小的特征对象
- ios - 如何将多个过滤器应用于领域数据库结果
- typescript - VS Code 抱怨错误 TS7013 但 Typescript 不是
- emacs - 为什么在 emacs 的这个例子中词法绑定不起作用?