В заводной можно сделать:
class Foo {
Integer a,b
}
Map map = [a:1,b:2]
def foo = new Foo(map) // map expanded, object created
Я понимаю, что Scala не в каком-то смысле этого слова, Groovy, но мне интересно, поддерживается ли расширение карты в этом контексте
Проще говоря, я попытался и потерпел неудачу с:
case class Foo(a:Int, b:Int)
val map = Map("a"-> 1, "b"-> 2)
Foo(map: _*) // no dice, always applied to first property
Связанная нить , которая показывает возможные решения проблемы.
Теперь, из того, что я смог выкопать, по крайней мере, начиная с Scala 2.9.1, рефлексия в отношении классов дел - это, по сути, запрет. Таким образом, в результате получается, что человек вынужден заниматься созданием объектов вручную, что, учитывая силу Скалы, несколько иронично.
Я должен упомянуть, что вариант использования включает в себя карту параметров запроса сервлета. В частности, используя Lift, Play, Spray, Scalatra и т. Д., Я хотел бы взять очищенную карту параметров (отфильтрованную по слою маршрутизации) и связать ее с экземпляром класса целевого случая без необходимости создания объекта вручную или указания его типов. , Это потребует «надежного» отражения и таких последствий, как «str2Date» для обработки ошибок преобразования типов.
Возможно, в версии 2.10 с новой библиотекой отражений реализация вышеописанного будет хорошей задачей Только 2 месяца в Скала, так что просто поцарапать поверхность; Я не вижу никакого простого способа осуществить это прямо сейчас (для опытных разработчиков Scala, возможно, выполнимо)