交换机中的计算案例陈述

问题描述 投票:0回答:1

我一直在问自己这个问题已有一段时间了,这是一个基本的问题,但是我从来没有其他方法可以做到这一点

目标消除代码中的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

java optimization switch-statement
1个回答
0
投票

对于初学者,我会使用:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.