条件运算符

时间:2012-01-07 08:31:36

标签: java

此代码有什么问题
if(getResponseDataMap().containsKey("A"){ a.setText(getResponseDataMap().get("A").toString); }

像这样转换。

getResponseDataMap().containsKey("A")?a.setText(getResponseDataMap().get("A").toString()):""

其中getLocalRequestDataMap是HashMap。而setText是android的功能

它给编译时错误
此行的多个标记
     - 类型不匹配:无法从String转换为      布尔
     - 语法错误,插入“)”以完成表达式
     - 令牌“)”上的语法错误,删除此令牌

2 个答案:

答案 0 :(得分:4)

就其本身而言,问题是你给出了一个不是陈述的表达。

然而,通过作业,没关系:

import java.util.*;

public class Test {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<String, String>();

        String x = map.containsKey("A") ? "" : "";
    }
}

我怀疑问题出现在你没有展示的一些代码中。请提供更多背景信息 - 理想情况下是一个简短但完整的程序,例如我的,但它证明了错误。

编辑:既然你编辑了这个问题,你可能会得到一个不同的错误。条件运算符不是有效的独立语句,并且每个操作数都需要是非void表达式(还有一些其他注意事项)。所以不要这样:

getResponseDataMap().containsKey("A") ?
    a.setText(getResponseDataMap().get("A").toString()):""

怀疑你想要:

a.setText(getResponseDataMap().containsKey("A") ? 
          getResponseDataMap().get("A").toString() : null);

但是,我个人会把它写成:

Object response = getResponseDataMap().get("A");
a.setText(response == null ? "" : response.toString());

另一方面,如果想要在地图包含密钥时设置文本,那么您应该回到原来的if语句,或者可能:

Object response = getResponseDataMap().get("A");
if (response != null) {
    a.setText(response.toString());
}

答案 1 :(得分:1)

如果我对此表达式的结果不执行任何操作,则会出现相同的错误。这是一个例子:

    String try() {
      HashMap<String, String> getLocalRequestDataMap = new HashMap<String, String>();
      getLocalRequestDataMap.containsKey("A")?"":"";
      return "";
    }

但如果您使用它,则没有错误:

    String try() {
      HashMap<String, String> getLocalRequestDataMap = new HashMap<String, String>();
      return getLocalRequestDataMap.containsKey("A")?"":"";
    }