java - 从函数返回通用对象
问题描述
我正在编写一个向我们的服务添加指标的函数,我想让它通用,以便它可以用于不同类型的指标。我不想做任何奇怪的转换,所以我想像这样使函数通用:
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);
两者都会起作用。
推荐阅读
- javascript - 是否可以将 react-devtools-inline 安装到窗口中?
- bash - 在 Ubuntu 20.04 中针对来自 mailutils 的邮件发送带有文本和附件的电子邮件的行为发生了变化
- android - 来自 WebClient.DownloadDataAsync 的异常“无法识别 URI 前缀”
- akka - 未订阅周期响应的 Akka Streams HTTP API
- python - 重置井字游戏板的问题 - Python tkinter
- logging - GCP 日志记录 - 识别异常流量
- javascript - React-native 问题性能
- c - 当C中有多个同名记录时如何删除记录
- java - 如何删除字符串的开头和结尾字符
- docker - GCP 管理 kubernetes 自动部署镜像路径