从函数返回通用对象
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);
两者都可以。
我正在编写一个用于向我们的服务添加指标的函数,我想让它成为通用的,以便它可以用于不同类型的指标。我不想做任何奇怪的转换,所以我想像这样使函数通用:
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);
两者都可以。