java - 避免在 Java 中使用多个 If 语句

标签 java

我编写了一个类似这样的方法。但我想这应该进行重构。 谁能提出避免使用这种多重 if 语句的最佳方法?

private String getMimeType(String fileName){
  if(fileName == null) {
    return "";   
  } 
  if(fileName.endsWith(".pdf")) {
    return "application/pdf";   
  }
  if(fileName.endsWith(".doc")) {
    return "application/msword";  
  }
  if(fileName.endsWith(".xls")) {
    return "application/vnd.ms-excel"; 
  }
  if(fileName.endsWith(".xlw")) {
    return "application/vnd.ms-excel"; 
  }
  if(fileName.endsWith(".ppt")) {
    return "application/vnd.ms-powerpoint"; 
  }
  if(fileName.endsWith(".mdb")) {
    return "application/x-msaccess"; 
  }
  if(fileName.endsWith(".rtf")) {
    return "application/rtf"; 
  }
  if(fileName.endsWith(".txt")) {
    return "txt/plain"; 
  }
  if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {
    return "txt/html"; 
  }
  return "txt/plain"; 
}

我不能在这里使用 switch-case,因为我的“条件”是 java.lang.String

最佳答案

您可以使用 Map保存您的解决方案:

Map<String,String> extensionToMimeType = new HashMap<String,String>();
extensionToMimeType.put("pdf", "application/pdf");
extensionToMimeType.put("doc", "application/msword");
// and the rest

int lastDot = fileName.lastIndexOf(".");
String mimeType;
if (lastDot == -1) {
    mimeType = NO_EXTENSION_MIME_TYPE;
} else {
    String extension = fileName.substring(lastDot+1);
    mimeType = extensionToMimeType.getOrDefault(extension, 
                                                UNKNOWN_EXTENSION_MIME_TYPE);
}

要使此代码正常工作,您需要像在您的类(class)中一样定义 NO_EXTENSION_MIME_TYPEUNKNOWN_EXTENSION_MIME_TYPE,有点像这样:

private static final String NO_EXTENSION_MIME_TYPE = "application/octet-stream";
private static final String UNKNOWN_EXTENSION_MIME_TYPE = "text/plain";

关于java - 避免在 Java 中使用多个 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298672/

相关文章:

java - 是否可以仅从 wsdl 文件创建 Web 服务客户端?

java - 从容器获取线程?

java - Java 中的私有(private)扩展

java - 有人可以解释一下这个错误是什么意思吗?

java - 如何使主窗口足够大以显示完整标题

java - 使用Slick2D,如何在游戏过程中更改分辨率?

java - 如果我在本地主机上运行 App Engine 应用程序,我是否看不到 X-AppEngine-Country 的值?

java - Java Card 中的受限椭圆曲线

java - OWL API 支持 Oasis XML 目录吗?

java - 如何在 Java 中进行非破坏性队列检查