Правильные имена классов в отладчике IntelliJ (scala) - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в 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!"
})

Вот что я вижу в отладчике: enter image description here

Согласно документации :
"Метод select () принимает функцию выбора в качестве аргумента, которая вызывается для каждой совпадающей последовательности событий. Он получает совпадение в виде Map [String, Iterable [IN]]» *

Почему IntelliJ отображает MapLike$MappedValues, а не что-то вроде Map[String,Iterable[Person]]?

1 Ответ

0 голосов
/ 08 ноября 2018

Отладчик показывает вам класс времени выполнения.

В JVM параметры универсального типа «стираются» во время выполнения, поэтому они не будут видны в отладчике. Map это просто интерфейс, но MapLike$MappedValues реализует его как наследник AbstractMap.

Таким образом, отображаемый класс совместим с типом значения.

Чтобы найти тип выражения во время компиляции, IntelliJ может помочь вам:

  • выберите выражение
  • нажмите горячую клавишу "type info" (обычно shift + ctrl + p)
...