java - 从函数返回通用对象

标签 java generics casting type-parameter

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

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/

相关文章:

java - 为什么 Java 不解析这个 <generic> 方法签名?

c++ - 从基本数据类型到用户定义类型的类型转换

java - Textview 不粘在屏幕的右边缘(Android/Java)

java - Android ImageView 缩放类型 centerCrop

Linux 上的 Java File.toURI() 问题

c# - .NET : Scalability of generic Dictionary

java - 是否可以将 Object 对象作为方法参数传递

java隐式长转换行为

java - 将 Bigdecimal 转换为 Integer

java - 从 BroadcastReceiver(蓝牙)返回值