p.contains(MESSAGE_1032), p -> p.isAThing()); 稍后,我可以-6ren">
gpt4 book ai didi

java - 保存条件逻辑的枚举 - 可能吗?

转载 作者:行者123 更新时间:2023-11-30 03:15:14 25 4
gpt4 key购买 nike

澄清一下,我想要这样的东西:

MESSAGE_1042("messageText", p -> p.contains(MESSAGE_1032), p -> p.isAThing());

稍后,我可以这样调用:

for (Message message : Messages) {
if (message.conditionsMet()) {
//doTheThing
}
}

我实际上并不关心是否可以使用 lambda 或谓词,或者如何设置条件,或者如何测试它们。我知道我可以用我自己的类来做到这一点,我只需扩展该类并为每个单独的类实现conditionsMet()。

但是,我希望我最终会拥有很多这样的东西,并且我不想拥有一个包含数百个类的包,因为我可以拥有一个包含许多行的枚举。

了解更多背景信息:这是一个个人项目。我正在制作一种交互式故事,这些消息是用户可以说的话。但是,可能有多个条件可以决定他们是否可以选择实际说出消息。

如果我可以将条件存储在包含文本的枚举中,那么这对我来说更方便。当我在其他代码中使用枚举本身时,我不必担心它的特殊条件。在被允许使用之前它知道自己的条件,我只想问它是否满足这些条件。

那么有没有合理的方法可以在枚举中获取它?或者我是否必须接受大量的类(class)?

最佳答案

您可以重写各个枚举项中的方法。

enum Message {
A() {
@Override
public boolean conditionsMet() {
...
}
},
B() {
@Override
public boolean conditionsMet() {
...
}
},
...
;
public abstract boolean conditionsMet();
}

然后给定一个 Message 实例,调用 conditionsMet() 将从特定实例中获取实现。

只要实例本身提供实现,您就可以将枚举方法标记为抽象方法。

(谢谢 dkatzel。)

关于java - 保存条件逻辑的枚举 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788768/

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