我有一些示例代码,看起来它使用了一个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。
我知道这一定很简单,但我无法理解。
有什么想法吗?
答案 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);
}