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 就不会抛出警告
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 就不会抛出警告