Возврат универсального объекта из функции - PullRequest
2 голосов
/ 08 апреля 2019

Я пишу функцию добавления метрик к нашему сервису и хочу сделать ее общей, чтобы ее можно было использовать для разных типов метрик.Я не хочу делать какое-то странное приведение, поэтому я подумал о том, чтобы просто сделать функцию общей:

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 в соответствии с параметром типа?

1 Ответ

2 голосов
/ 08 апреля 2019

Изменить

public <T extends Metric> T addMetric(String key,
        Function<MetricRegistry, T> metricProducer)

На

public <T extends Metric> Metric addMetric(String key,Function<MetricRegistry, T> metricProducer)

Или Изменить

Metric m = metricProducer.apply(registry);

На

T m = metricProducer.apply(registry);

Оба будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...