Я написал метод, который возвращает объекты, которые расширяют общий признак. Я хочу указать тип возвращаемого объекта как объект с этим признаком. Усложнение состоит в том, что признак имеет рекурсивную подпись типа.Как определить тип объектов, которые все расширяют общий признак с рекурсивной сигнатурой типа.
В частности, я использую 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
Я смущен по рекурсии и перекрестной ссылке в определении признаков, и мне непонятно, какие параметры типа должны быть. Что я должен использовать для параметров типа?
То, что вы предлагаете работает просто отлично. Однако мне нужно вызвать 'aggregations' для объектов, возвращаемых' asAggregation'. Я хочу вернуть 'AggregationDefinition', потому что именно здесь определены« агрегации ». – canzar