我一直在问自己这个问题已有一段时间了,这是一个基本的问题,但是我从来没有其他方法可以做到这一点
目标消除代码中的else if
我实际上有这个:
String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"
String content = parser.getPlainContent();
if (contentType.indexOf("text/a") > 0) {
processTextA(content);
} else if (contentType.indexOf("text/b") > 0) {
processTextB(content);
} else if (contentType.indexOf("text/c") > 0) {
processTextC(content);
}
我想做的是类似的事情:
String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"
String content = parser.getPlainContent();
switch (contentType) {
case (contentType.indexOf("text/a") > 0):
processTextA(content);
break;
case (contentType.indexOf("text/b") > 0):
processTextB(content);
break;
case (contentType.indexOf("text/c") > 0):
processTextC(content);
break;
}
有什么办法可以实现类似的目的?
在示例中,我放置了3 else if
,但实际情况是我嵌套了约20 else if
对于初学者,我会使用:
contentType.contains("text/a")
而不是:
contentType.indexOf("text/a") > 0
如果我理解正确,您的contentType
中只能有一个MimeMessage
。您可以简单地将contentType
除以;
,以获得所需的字符串部分。然后,您可以在字符串上切换大小写。像这样的东西:
String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"
String content = parser.getPlainContent();
String contentTypeSplitted = contentType.split(";")[0];
switch (contentTypeSplitted) {
case ("text/a"):
processTextA(content);
break;
case ("text/b"):
processTextB(content);
break;
case ("text/c"):
processTextC(content);
break;
}