Как получить список с конфигурационной библиотекой Typesafe

Я пытаюсь в Scala получить список из файла конфигурации, такого как something.conf с TypeSafe.

В something.conf задаю параметр:

mylist=["AA","BB"]

и в моем коде Scala я делаю:

val myList = modifyConfig.getStringList("mylist")

Простые параметры конфигурации работают нормально, но может ли кто-нибудь дать мне пример того, как извлечь список?


person Martin    schedule 28.07.2013    source источник
comment
Можете уточнить вопрос? Глядя на API, ваш код выглядит нормально. Вы должны найти List[String] в myList.   -  person 0__    schedule 29.07.2013
comment
Я предполагаю, что вы ожидаете, что результатом getStringList будет Scala List. Это не так — typesafe-config — это чистая библиотека Java, а getStringList возвращает реализацию java.util.List.   -  person ghik    schedule 29.07.2013


Ответы (4)


Как отмечает @ghik, библиотека Typesafe Config основана на Java, поэтому вы получаете java.util.List[String] вместо scala.List[String]. Итак, либо вы делаете преобразование в scala.List:

import collection.JavaConversions._
val myList = modifyConfig.getStringList("mylist").toList

Или (вероятно, менее неудобно) вы ищете библиотеку Scala. вики-инструменты содержат ссылки как минимум на следующие поддерживаемые библиотеки:

(Отказ от ответственности: я не использую их, поэтому вам нужно будет убедиться, что они поддерживают ваши типы и формат)

person 0__    schedule 28.07.2013
comment
Я новичок в Scala :-) и вы были правы, я смешиваю java.util.List со scala.List. import collection.JavaConversions._ val myList = modifyConfig.getStringList("mylist").toList Сделал трюк. Спасибо, я проверю эти ссылки... - person Martin; 29.07.2013

Для справки: поскольку Scala 2.12 JavaConversions устарела, вы можете:

import collection.JavaConverters._
val myList: List[String] = modifyConfig.getStringList("mylist").asScala.toList
person Leszek Gruchała    schedule 20.12.2016

Вы можете попробовать мою оболочку scala https://github.com/andr83/scalaconfig — она поддерживает чтение родной scala типы непосредственно из объекта конфигурации. В вашем случае это будет выглядеть:

val myList = modifyConfig.as[List[String]]("mylist")
person andr83    schedule 29.09.2016

Начиная с Scala 2.13, стандартная библиотека обеспечивает неявное преобразование списков Java в Scala через scala.jdk.CollectionConverters:

import scala.jdk.CollectionConverters._

val myList: List[String] = conf.getStringList("mylist").asScala.toList

Это заменяет устаревшие пакеты scala.collection.JavaConverters/JavaConversions.

person Xavier Guihot    schedule 17.11.2019