我正在编写一个向我们的服务添加指标的函数,我希望使其通用,以便它可以用于不同类型的指标。我不想做任何奇怪的转换,所以我想到让函数像这样通用:
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
> 根据类型参数?
最佳答案
改变
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);
两者都可以。
关于java - 从函数返回通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55573678/