gpt4 book ai didi

java - 一般应用枚举成员或方法

转载 作者:行者123 更新时间:2023-12-02 03:40:34 26 4
gpt4 key购买 nike

我有一个接口(interface)ServiceArgument,它定义了size() promise 。

public interface ServiceArgument {
public int size ();
}

我的一些enum类型实现了这个接口(interface)

public enum StringCode implements ServiceArgument {
FOO,
BAR,
BACON,

public int size() {
return values().length;
}
}

我的一些类遵循 EnumService 抽象类。

public abstract class EnumService {
abstract void query (Enum<? extends ServiceArgument> e);
}

最后,某个类扩展了这个抽象类:

public class ServiceTranslation extends EnumService implements Serializable {
/**some code and ctors and transient stuff etc **/

@Override
void query (Enum<? extends ServiceArgument> e) {
//line that matters :
if (e.ordinal() >= e.size()) {
throw InvalidStringCodeAsked();
}
}

我的问题是,我不能在最后一行使用 e.size(),因为我不会在示例枚举中使用 FOO.size()。有没有办法:

1) 专门化 query 方法在 EnumService 的具体实现中接受的参数

2) 获取在 ServiceTranslation.query(MYSTERIOUS.ENUM) 中调用的 Enum 的具体类型,以便能够调用 ConcreteENUM.size()。甚至 ConcreteEnum.values().length,都是一样的。

3)甚至过滤所有不是来自正确枚举类型的内容,通过方法重写直接抛出 InvalidEnumeratedTypeException ,但我不熟悉多重重写。

4)我没想到的事情

编辑:评论中的@shmosel是正确的,即使我得到错误的枚举作为参数,它也永远不会大于它的大小。将其与其大小进行比较是没有意义的。

最佳答案

这个怎么样?

public abstract class EnumService {
abstract <T extends Enum<T> & ServiceArgument> void query (T e);
}

public class ServiceTranslation extends EnumService implements Serializable {
@Override
<T extends Enum<T> & ServiceArgument> void query (T e) {
if (e.ordinal() >= e.size()) {
throw InvalidStringCodeAsked();
}
}
}

关于java - 一般应用枚举成员或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36883964/

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