首页 > 解决方案 > 从函数返回通用对象

问题描述

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

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

但是,由于“不兼容的类型”,它不起作用,我觉得这很奇怪。它声明它需要TMetric在返回时找到,但T尚未根据类型参数定义为Metric

标签: javagenericscastingtype-parameter

解决方案


改变

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

两者都会起作用。


推荐阅读