我写了一个返回所有扩展共同特征的对象的方法。我想将返回类型指定为具有该特征的对象。复杂的是特征具有递归类型签名。
特别是,我正在使用elastic4s并查看aggregationDefinition trait。特征定义是:
trait AggregationDefinition[+Self <: AggregationDefinition[Self, B], B <: AggregationBuilder[B]]
我的方法的简化版本是:
def asAggregation(): AggregationDefinition = {
aggType match {
case "terms" => aggregation.terms(aggName).field(key)
case "cardinality" => aggregation.cardinality(aggName).field(key)
}
}
复杂性在于AggregationDefinition,它需要类型参数:
Error: trait AggregationDefinition takes type parameters
我对特征定义中的递归和交叉引用感到困惑,我不清楚类型参数应该是什么。我应该将什么用于类型参数?
答案 0 :(得分:0)
AggregationDefinition
需要类型绑定(请参阅类型签名),您可以使用AbstractAggregationDefinition
,例如:
def asAggregation(): AbstractAggregationDefinition = {
aggType match {
case "terms" => aggregation.terms(aggName).field(key)
case "cardinality" => aggregation.cardinality(aggName).field(key)
}
}