说我有一个只是的枚举
public enum Blah {
A, B, C, D
}
Run Code Online (Sandbox Code Playgroud)
我想找到一个字符串的枚举值,例如"A",这将是Blah.A.怎么可能这样做?
Enum.valueOf()我需要的方法是什么?如果是这样,我将如何使用它?
这个功能是否会被放入以后的Java版本中?
有人可以解释为什么我不能这样做,就像Java的switch声明的技术方式一样吗?
对不起,我找不到回答这个问题的问题,我几乎可以肯定其他人已经提出了这个问题.
我的问题是我正在编写一些系统库来运行嵌入式设备.我有命令可以通过无线电广播发送到这些设备.这只能通过文字来完成.在系统库中我有一个线程来处理看起来像这样的命令
if (value.equals("A")) { doCommandA() }
else if (value.equals("B")) { doCommandB() }
else if etc.
Run Code Online (Sandbox Code Playgroud)
问题是它有很多命令会迅速失控.看起来很可怕,调试很痛苦,并且在几个月的时间里难以理解.
在这个问题中,据说我可以使用访客模式而不是一堆instanceofs.Jmg说:"如果你不能自由改变A,B和C,你可以应用访客模式来实现同样的目标."
据我所知,我仍然需要为A,B和C支持访问者(accept()例如,有一个方法).
我的问题是我完全没有可能改变A,B和C.我只是从外国图书馆获得Car对象并且必须调用wash()特定于卡车,赛车和公共汽车的方法.
我想我还需要一个if-else-if带instanceofs 的结构.我对吗?
我有一个TriggerType枚举,可以添加不同的触发器
public enum TriggerType {
meta,data,list,toggle
}
Run Code Online (Sandbox Code Playgroud)
这些触发器类型在不同的处理程序(例如组件,仪表板等)中使用,以识别通过switch-case在处理程序内触发的触发器,例如,下面给出了使用触发器通过switch-case的ComponentHandler的代码片段
@Override
public TriggerResultInterface executeTriggerJob(TriggerEventHelper triggerEventHelper) throws TriggerHandlerException {
switch (triggerEventHelper.getTriggerName()) {
case meta:
return getMetaComponentConfig(triggerEventHelper);
case data:
return getComponentData(triggerEventHelper);
default:
LOGGER.debug(INVALID_TRIGGER_NAME_CONFIGURED);
throw new TriggerHandlerException(INVALID_TRIGGER_NAME_CONFIGURED);
}
}
Run Code Online (Sandbox Code Playgroud)
想象一下如果我想添加一个新的Trigger,我必须更新不可避免的枚举类,同时我必须更新我需要使用Trigger的每个处理程序类,这种设计方式是编码是是否有任何其他更好的解决方案可以增强此代码并遵循SOLID原则和更好的设计.
我想强调说这个问题与此不重复.在这种情况下,每种类型只需要一种行为(例如:convertToMp3).但我的问题所指的是我的枚举类型(触发器类型)依赖于它可能使用的处理程序,因此每个触发器类型枚举的行为或实现将取决于它正在使用的处理程序的要求.
java enums design-patterns switch-statement solid-principles
我需要建议在Java中应用条件的正确方法.
我有100个条件,我必须根据这些条件更改将显示给用户的String变量的值.
示例条件: a<5 && (b>0 && c>8) && d>9 || x!=4
有更多的条件,但变量或多或少相同.
我现在正在这样做:
if(condition1)
else if(condition2)
else if(condition3)
...
Run Code Online (Sandbox Code Playgroud)
切换案例替代方案显然会嵌套在if-else的ie中
if(condition1)
switch(x)
{
case y:
blah-blah
}
else if(condition2)
switch(x)
{
case y:
blah-blah
}
else if(condition3)
...
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一些更优雅的解决方案,比如使用具有多态支持的接口,我可以做些什么来避免代码行或什么应该是正确的方法.
- -编辑 - -

我想在Android设备上需要这个.但它更像是一个java构造.
这是我与我的条件的一个小快照.如果少数通过/失败,将添加更多.这显然需要更多if-else有/无嵌套.在那种情况下,处理会变慢.
我现在将消息存储在一个单独的类中,其中包含我保持静态的各种字符串变量,因此如果条件为真,那么我从唯一的类中选择静态变量并显示该变量.这对于存储结果消息是否正确.
我已经阅读过以前的堆栈交换,用Java替换条件逻辑,例如带有状态/策略模式的IF/ELSE,但我不确定我的情况是否适合替换.以下是我看到的结果 - Java中的if语句的长列表以及将许多'if else'语句转换为更干净的方法
我本质上是在编写一个文件下载管理器,这些是我的IF/ELSE结构:
基本上我理解你将这四个条件作为哈希映射中的键,然后值是需要发出的"命令".但是我相信你仍然需要一个If/Else来决定在作为输入给出的键上调用什么动作.所以我没有看到好处.有人可以解释一下吗?
我有一个看起来像这样的代码:
if(num == 1) {
return new Alg1();
} else if (num == 2) {
return new Alg2();
}
...
else if (num == n) {
return new AlgN();
}
Run Code Online (Sandbox Code Playgroud)
我试图使用策略模式,但似乎它不能满足减少if语句的任务,请你建议我用其他方法来做,谢谢