【问题标题】:Correct class names in IntelliJ debugger (scala)在 IntelliJ 调试器(scala)中正确的类名
【发布时间】:2019-04-02 03:48:50
【问题描述】:

我是 scala 和 IntelliJ 的新手,所以这听起来像是一个愚蠢的问题。但是,我看到在调试时,IntelliJ 会将参数类型推断为某种“奇怪”类型,在我的情况下为 MapLike$MappedValues。预期类型为Map[String, Iterable[Person]]。

为什么 IntelliJ 不能显示正确的类型?现在这对我来说很重要,因为通过调试我试图找出正确的参数类型,因为这部分的 API 文档不是很清楚(使用 Apache Flink CEP)

代码示例:

val result:DataStream[String] = patternStream.select(patterns => {
  val person:Person = patterns.head._2.head

  s"Person ${person.name} of age ${person.age} can drink!"
})

这是我在调试器中看到的:

根据documentation:
“select() 方法以一个选择函数作为参数,为每个匹配的事件序列调用该函数。它以 Map[String,可迭代[IN]]"

为什么 IntelliJ 显示 MapLike$MappedValues 而不是 Map[String,Iterable[Person]] 之类的东西?

【问题讨论】:

    标签: scala class debugging intellij-idea


    【解决方案1】:

    调试器正在向您显示运行时类。

    在 JVM 上,泛型类型参数在运行时被“擦除”,因此它们在调试器中不可见。 Map 只是一个接口,但MapLike$MappedValues 将其实现为AbstractMap 的继承者。

    因此,显示的class与值的type兼容。

    要查找表达式的编译时类型,IntelliJ 可以帮助您:

    • 选择表达式
    • 按“输入信息”热键(通常是 shift+ctrl+p)

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2012-04-27
      • 2019-12-15
      • 2017-03-13
      相关资源
      最近更新 更多