我正在尝试在Scala中创建结构类型,以避免定义中间类。本质上,我只想定义一个将在JSON字符串中编组/解组的结构。
例如,描述以下JSON
{
"query": {
"range" : {
"number" : {
"gte": 123,
"lte": 456
}
}
}
}
我有一个对应的结构类型:
//structural
type NumberRange = {val range: {val number: {val gte: Long; val lte: Long}}}
//named
case class NumberRangeQuery(query: NumberRange)
//instance
val nrq: NumberRangeQuery = ???
创建NumberRangeQuery
实例的正确方法是什么?
答案 0 :(得分:0)
在这种情况下,答案不是使用结构类型,而是花更多的精力来使用案例类,并使代码更具可读性和效率:
case class Number(gte: Long, lte: Long)
case class Range(number: Number)
case class Query(range: Range)
case class NumberRangeQuery(query: Query)
val nrq: NumberRangeQuery = NumberRangeQuery(
Query(
Range(
Number(1, 3)
)
)
)
在这种情况下,为什么要选择结构类型而不是混凝土类型?
答案 1 :(得分:-2)
要创建实现结构类型的类的内联实例,可以使用以下方法:
//instance
val nrq: NumberRangeQuery = NumberRangeQuery(new {
val range = new {
val number = new {
val gte = 1: Long
val lte = 3: Long
}
}
})
请注意,实例化“匿名”结构类型至少要受到2种惩罚:
1)它可以说是可读的代码
2)Scala将在运行时使用反射在此类实例上调度方法(discussion here)