Java:三元运算符,不能正常工作

时间:2015-01-10 09:55:29

标签: java android

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

这是代码

        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中缺少:(冒号)。那么也许这不是一个特工运营商呢?

我正在使用的是Android Studio。

我知道这一定很简单,但我无法理解。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

  condition ? answerifTrue : answerIfFalse;        

因此,如果您想从两者中创建单个三元运算符,则需要确定第一个条件为假时所需的答案,例如;

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

但是我想,无论如何你需要的东西并不适合三元运算符,你可能需要将语句完全重构为if else块或switch语句。

答案 1 :(得分:0)

嗯,据我所知,用例你必须做这样的事情:

 Tracker t = null; 

 if (trackerId == TrackerName.APP_TRACKER) {
    t = analytics.newTracker(R.xml.app_tracker);
 } else if (trackerId == TrackerName.GLOBAL_TRACKER) {
    t = analytics.newTracker(PROPERTY_ID);
 } else {
    t = analytics.newTracker(R.xml.ecommerce_tracker);
 }