在java类中执行多个检查的更优雅方法?

时间:2016-05-22 04:33:05

标签: java

我有以下条件来根据我将在参数incomingProduct上接收的值来检查我将要检查的内容,所以,我有以下多个条件,但它们看起来很奇怪,因为每次执行多次检查时请告知如何如果我可以做同样的事情,我可以用其他方式自定义下面的检查。

String incomingProduct = wokerchoice.getProduct();

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("CD") ) {
  wokerchoice.setFourceSystem
  ((String)configuration.getConfiguration().get("CD"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("MODITY") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("MODITY"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("WQEQD") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("WEREQD"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("QRTFI") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("WERFI"));
  }  

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("URES") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("V"));
  }  

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("FXQWNM") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("FXQWNM"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("IERTRD") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("IERTRD"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("UHVMM") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get(UHV"MM"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("OPT") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("OPT"));
  }

  if (incomingProduct!= null &&  incomingProduct.equalsIgnoreCase("RECE") ) {
     wokerchoice.setFourceSystem((String)configuration.getConfiguration().get("RECS"));
  }

1 个答案:

答案 0 :(得分:3)

由于你的不一样,通常做的是将传入和传出的映射放在地图上:

Map<String, String> ht = new HashMap<String, String>(){ { put("ONE","ONE"); 
put("OTHER","TWO");} };

String cfg = ht.get(incomingProduct.toUpperCase());
if (cfg != null)
    wokerchoice.setFourceSystem((String)configuration
    .getConfiguration().get(cfg)); 

遗憾的是,java还没有让我们能够声明文字地图,所以我使用了你上面看到的丑陋的匿名类hack来获得一个单行。

如果你可以得到相同的传入和传出映射(我推荐,虽然它可能不可能),你可以使用一个列表或字符串数​​组。

String[] mapping = {"ONE", "TWO"};
String incoming = incomingProduct.toUpperCase();
if(Arrays.asList(mapping).contains(incoming)){
 wokerchoice.setFourceSystem((String)configuration
        .getConfiguration().get(incoming));
}

但是真的;假设getConfiguration()。get()如果没有值则返回null(并且如果映射步骤你可以摆脱),最好的答案看起来像这样:

String incoming = incomingProduct.toUpperCase(); 
Object cfg= configuration.getConfiguration().get(incoming);
If (cfg != null)
    wokerchoice.setFourceSystem((String)cfg);
相关问题