Объект не является ошибкой значения в scala
При попытке сделать карту в Scala, я получаю следующее сообщение об ошибке: object Map не является значением
Код, который я использую, следующий:
val myStringMap = Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")
Я очень озадачен тем, почему я не могу создать эту карту, потому что, посмотрев на документацию Scala, мне кажется, что синтаксис моего кода правильный.
Ответы
Ответ 1
Когда вы видите ошибку "объект не является значением", это обычно означает, что тип внутри области видимости - это тип Java - вы, вероятно, импортируете java.util.Map
в область
scala> Map(1 -> "one")
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one)
Но
scala> import java.util.Map
import java.util.Map
scala> Map(1 -> "one")
<console>:9: error: object Map is not a value
Map(1 -> "one")
^
Помните, что в scala каждый класс поставляется с (необязательным) сопутствующим объектом, который является значением. Это не относится к классам Java.
Ответ 2
Я получил аналогичную ошибку в списках. попробуйте в консоли scala:
import java.util.List object test { def a():List[String] = { val list = List[String](); null }}
вы получите err "Object List is not a value."
Вы получаете его, потому что скрываете встроенный тип List, потому что List отличается от java.util.List
Что делать, если кто-то хочет использовать util.List?
вы можете использовать квалифицированное имя или импорт переименования
! import java.util. {List = > JList}
import java.util. {List = > JList}
Ответ 3
Просто нашел это, поэтому, возможно, будет полезно поделиться моим решением.
Если вы импортировали java.util.Map и вам нужно использовать scala.collection.immutable.Map, то используйте его с полным именем, а вместо
Map(1 -> "one")
делать
scala.collection.immutable.Map(1 -> "one")
Таким образом, он будет знать, что вы имеете в виду
Ответ 4
Поскольку в scala каждый родной класс scala поставляется с (необязательным) сопутствующим объектом (позволяющим назначать из объекта-компаньона, как в вашем примере кода) при включении класса java в код scala всегда помнить о создании экземпляра класс, вызвав конструктор, т.е. используйте ключевое слово "new", создав таким образом значение.