Java:三元运算符,没有按预期工作

标签 java android

我有一些示例代码,看起来它使用了 ternery 运算符,但它需要 3 个项目。所以我真的很困惑,我在其他语言中看到的只取2,即true和false。

这是代码

        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID)
                : analytics.newTracker(R.xml.ecommerce_tracker);

我想做的是删除该行

     : analytics.newTracker(R.xml.ecommerce_tracker);

现在就是这样

        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID);

但它指出 IDE 中缺少 :(冒号)。那么也许这根本不是一个三元运算符?

我使用的IDE是Android Studio。

我知道这一定很简单,但我无法弄清楚。

有什么想法吗?

最佳答案

你所拥有的是嵌套三元运算符。将它们视为以下内容(下面的伪代码)

  condition ? answerifTrue : secondternaryoperator;
  where secondternaryoperator =
        secondcondition ? answerifTrue : answerIfFalse;

基本上,这是两个三元运算符的组合。如果第一个条件为 true,则仅返回 answerifTrue。但如果条件为假,它将运行第二个三元运算符来根据第二个条件确定要返回的内容。奇异三元运算符看起来就像这样;

  condition ? answerifTrue : answerIfFalse;        

因此,如果您想从两者创建一个三元运算符,则需要确定在第一个条件为 false 时想要哪个答案;

  Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker) : analytics.newTracker(PROPERTY_ID);

但是,我想,您所需要的无论如何都不太适合三元运算符,您可能需要将语句完全重组为 if else block 或 switch 语句。

关于Java:三元运算符,没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27874899/

相关文章:

android - 如何在Android App中创建用户手册?

安卓 logcat 错误 : "E/CliptrayUtils: hideClipTrayIfNeeded() TextView is focused!! hideClipTray()"

java - Android:更新窗口内 View 的线程

java - Spring MockMvc - 如何测试 REST Controller 的删除请求?

java - 连接到服务器中的 ms sql 数据库

android - 如何以编程方式读出在 Android 中选择了哪个语音识别?

android - 如何根据用户选择更改布局元素

java - 文件名在 Android Studio 的 TextView 中显示不正确

java - 是否可以将 IloNumVar 与 java 中的常量相加?

java - 收集苹果时 sound.play() 时 libgdx 滞后