Я пишу функцию добавления метрик к нашему сервису и хочу сделать ее общей, чтобы ее можно было использовать для разных типов метрик.Я не хочу делать какое-то странное приведение, поэтому я подумал о том, чтобы просто сделать функцию общей:
public <T extends Metric> T addMetric(String key,
Function<MetricRegistry, T> metricProducer) {
MetricRegistry registry = SharedMetricRegistries.tryGetDefault();
Metric m = metricProducer.apply(registry);
registry.register(key, m);
return m;
}
Однако она не будет работать из-за «несовместимых типов», которые я нахожу довольно странными.В нем говорится, что требуется T
, но найдено Metric
при возврате, но не T
уже определено как Metric
в соответствии с параметром типа?