Android lint 错误与 ?: 条件运算符运算符

Android lint error with ?: conditional operator operator

int color = (colorString != null) ?
                someIntReturningMethod(colorString) :
                ContextCompat.getColor(c, R.color.defaultForWhatever);
notificationBuilder.setColor(color);

我得到 "Should pass resolved color instead of resource id here"。

如果我删除 ?: 并将颜色定义为其中之一,Lint 没有问题。

我可以在不抑制任何有用警告的情况下解决这个问题吗?如果不是,我压抑哪一个?

请不要专门针对此问题的临时解决方案。我问的是 ?: 令人困惑的 lint。

[编辑] 那么,一般来说,没有针对“?: 混淆 Lint”的解决方案吗?

修改您的代码如下:

int color;
if (colorString != null) {
     color = someIntReturningMethod(colorString);
} else {
    color = R.color.defaultForWhatever;
}
int color = ContextCompat.getColor(c, color);

someIntReturningMethod 未返回已解析的 Android 颜色。可能它只是 returns 来自 res/colors.xml 的颜色,稍后必须用方法解决:
ContextCompat.getColor(Context context, int color)

您可以使用 @ColorInt 注释来注释该方法,这样 lint 就不会抛出警告