【问题标题】:Conditional operator条件运算符
【发布时间】:2012-01-07 08:31:35
【问题描述】:

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

这样转换。

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

其中 getLocalRequestDataMap 是一个 HashMap 。而setText是android的函数

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

【问题讨论】:

  • 在条件操作周围加上括号会消除编译错误吗?
  • 添加空格。也许编译器认为 "A"?"":"" 是单个字符串
  • 向我们展示这方面的代码。你如何处理这个表达式返回的字符串?把它返还?该方法返回哪种类型?将其分配给变量?这个变量是什么类型的?地图的类型是什么?如果在所有情况下都返回空字符串,那么这句话的意义何在?

标签: java


【解决方案1】:

就其本身而言,问题在于您给出的表达式不是语句。

但是,有了作业,没关系:

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") ? "" : "";
    }
}

我怀疑问题出在您未显示的某些代码中。请提供更多上下文 - 理想情况下是一个像我这样简短但完整的程序,但它会显示错误。

编辑:现在您已经编辑了问题,您可能会得到一个不同的错误。条件运算符不是有效的独立语句,每个操作数都必须是非空表达式(还有其他一些注意事项)。所以不要这样:

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());
}

【讨论】:

  • @MohitSharma:编辑了我的答案。老实说,目前还不清楚您要做什么。
【解决方案2】:

如果我对这个表达式的结果不做任何事情,我会得到同样的错误。这是一个例子:

    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")?"":"";
    }

【讨论】:

  • 但是你应该再次以某种方式使用三元运算符的结果。我认为您不能以您尝试的方式使用它(不过,这可以在 c++ 中使用)
猜你喜欢
  • 2017-12-03
  • 2013-03-22
  • 2014-01-11
  • 2013-06-03
  • 2017-08-25
  • 2011-03-21
  • 2021-10-22
相关资源
最近更新 更多