gpt4 book ai didi

java - 将此函数转换为使用泛型

转载 作者:行者123 更新时间:2023-11-29 06:04:13 24 4
gpt4 key购买 nike

我有一个函数,我正在尝试使用泛型进行转换,到目前为止我有:

public static <T extends Enum<T> & SomeInterface> EnumSet<T> convertToES(long val) {
EnumSet<T> es = EnumSet.noneOf(T.class);

for(T t : values()) {
if(t.getSomeProperty() > 0)
es.add(t);
}


return es;
}

其中 SomeInterface 有一个属性 getSomeProperty。

T.class 不工作,而且 values() 似乎也不工作。

以前我有:

public static EnumSet<SomeType> convertToES(long val) {
EnumSet<SomeType> es = EnumSet.noneOf(SomeType.class);

for (SomeType p : values()) {
if (p.getSomeThing())) > 0) {
es.add(p);
}
}

return es;
}

有没有办法让这个工作,或者这是不可能的?

最佳答案

这是因为 Java 通过erasure 实现泛型,所以 T 在运行时不存在。 Java 中的泛型只是一种语言工具,可帮助您避免犯太多可能在编译时被发现的错误。

解决方案是要求调用该方法的人将类本身作为真正的参数提供给您:

public static <T extends Enum<T> & SomeInterface> EnumSet<T> convertToES(
long val,
Class<T> tClass)
{
EnumSet<T> es = EnumSet.noneOf(tClass);

values() 而言,该方法存在于枚举类本身中,因此如果您已将代码移出该类,则需要获取另一个值方式:

    for(T t : tClass.getEnumConstants()) {
....

关于java - 将此函数转换为使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com