java - 我可以使用泛型转换此方法吗?

标签 java generics

我目前在一个类中有以下方法,我希望我可以将其推送到父类(super class),因为我将有一些其他类需要类似的功能。

public long convertToLong(EnumSet<SomeTypeHere> es) {

  long a = 0;

  for(SomeTypeHere sth : es) {
     a += sth.someLongProperty();

  }
}

如果我能做到这一点,那就太好了,除了集合之外,我以前从未真正使用过 Java 泛型。

最佳答案

您需要对泛型类型进行限制。如果包含 convertToLong 的类在同一类型上被参数化,您可以将边界放在那里:

import java.util.*;
public class GenericTest<C extends GenericTest.HasLongProperty> {
    static interface HasLongProperty {
        long someLongProperty();
    }
    public long convertToLong(Collection<C> es) {
        long a = 0;
        for(C sth : es)
            a += sth.someLongProperty();
        return a;
    }
}

或者如果包含 convertToLong 的类不是通用的,您可以将绑定(bind)单独放在该方法的声明中:

import java.util.*;
public class GenericTest {
    static interface HasLongProperty {
        long someLongProperty();
    }
    public <C extends GenericTest.HasLongProperty> long convertToLong(Collection<C> es) {
        long a = 0;
        for(C sth : es)
            a += sth.someLongProperty();
        return a;
    }
}

关于java - 我可以使用泛型转换此方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074602/

相关文章:

generics - 如何在 Rust 中声明可比较的东西的通用向量

java - 来自内部类的非最终变量 : should be automatically fixed by compiler?

使用 langdetect 进行 Java 语言检测 - 如何加载配置文件?

java - Stuckup with - HikariCP : JZ0C0: Connection is already closed (Sybase DB with SpringBoot v2. 1.7)

c# - 具有 "has property X"约束的通用函数?

java - java中如何决定使用哪个通配符?

java - 如何在定义持久化单元时注入(inject) SessionFactory?

java - Java 的 java.util.concurrent 包的 .NET 等价物是什么?

generics - 为什么我不能在这个 Rx 转换器中使用接口(interface)作为泛型类型?

java - 反转通用列表?