gpt4 book ai didi

java - 设计具有枚举依赖性的类的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:50 28 4
gpt4 key购买 nike

设计此类的最佳方式是什么。
标志类是一个简单的枚举

public enum Flag { ... };

public class Example {
private final Set<Flag> flags;
pubilc Example(Set<Flag> flags) {
this.flags = flags;
}

public Set<Flag> getFlags() {
return ImmutableSet.copyOf(flags);
}

public boolean isValid() {
return flags.contains(Flag.VALID);
}

public boolean isRequired() { ... };
}

一些用于创建示例对象的工厂代码。

Set<Flag> flags = EnumSet.allOf(Flag.class);
Example ex = new Example(flags);

以下哪一项是更好的做法:

方法一:然后在客户端代码中检查

if (ex.isValid()) { ... };

我在这种方法中看到的缺陷是,如果我添加一个新的 Flag,我还必须在 Example 类中创建一个新的 IsX 方法,这违反了开闭原则?

方法二:或者避免 Example 类中的所有 isX 方法,而在客户端中只有这个:

Set<Flag> set = ex.getFlags();
if (set.contains(Flag.VALID)) { ... }

这里面的缺陷是所有额外的样板代码吗?

最佳答案

为什么不做这样的事情:

public boolean isFlagged(Flag flag) {
return flags.contains(flag);
}

那么你的 if-s 看起来像:

if(ex.isFlagged(Flag.Valid))

关于java - 设计具有枚举依赖性的类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903989/

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