2013-03-12 196 views
3

我正在用Eclipse Juno编写我的代码,我正在使用散列表来设置我的dataImportObject,具体取决于其中的条目。 谁能告诉我什么是错这个问题: ht是我hashTable中与<String, Integer>对它使用三元运算符时出错

(ht.containsKey("DEVICE_ADDRESS")) ? 
    dataImportObject.setDevice_Address(dataitems[ht.get("DEVICE_ADDRESS")]) : 
    dataImportObject.setDevice_Address(""); 
+6

你得到了什么错误?在另一个说明中,考虑使用一个完整的'if-else'。三元代码难以阅读。 – 2013-03-12 17:16:41

+0

发布错误,也许更多的上下文的代码。 – mjuarez 2013-03-12 17:17:00

+0

欢迎来到Stack Overflow。你能给我们多一点继续吗?你期望发生什么? – Zutty 2013-03-12 17:17:00

回答

16

谁能告诉我什么是错这个

两件事情:

  • 条件运算符不能单独用作语句,只能用作表达式
  • 我承担这些set方法都返回void类型,所以他们不能在有条件的经营者显示为操作数

三个选项:

  1. 使用的if声明:

    if (ht.containsKey("DEVICE_ADDRESS")) { 
        dataImportObject.setDevice_Address(dataitems[ht.get("DEVICE_ADDRESS")])); 
    } else { 
        dataImportObject.setDevice_Address(""); 
    } 
    
  2. 使用条件运算符里面的setDevice_Address电话,或更清楚,事先:

    String address = ht.containsKey("DEVICE_ADDRESS") 
        ? dataitems[ht.get("DEVICE_ADDRESS")] : ""; 
    dataImportObject.setDevice_Address(address); 
    
  3. 如果你知道你的哈希表将不会有任何空值,就可以避免双重查询:

    Integer index = ht.get("DEVICE_ADDRESS"); 
    String address = index == null ? "" : dataitems[index]; 
    dataImportObject.setDevice_Address(address); 
    
+0

非常好的回答:) – 2013-03-12 17:20:12

+1

是的,就是这样。似乎我误解了三元运算符......我只是想用它来缩短我的If语句,因为我需要其中的很多,但是由于我的set函数返回void,所以这不起作用...所以我将不得不使用数字2.非常感谢 – 2013-03-12 17:24:53