从函数返回通用对象

Returning generic object from function

我正在编写一个用于向我们的服务添加指标的函数,我想让它成为通用的,以便它可以用于不同类型的指标。我不想做任何奇怪的转换,所以我想像这样使函数通用:

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;
}

但是它不会工作,因为 "incompatible types" 我觉得很奇怪。 它声明它需要 T 但在 return 上找到了 Metric,但是 T 是否已经根据类型参数定义为 Metric

改变

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);

两者都可以。