在我的代码的一部分中,我需要强制一个字符串为小写 - 这个字符串来自一个常量,因此总是英语。
String table = DirectoryTableModule.DirectoryContract.TABLE_NAME.toLowerCase();
这当然会引发皮棉警告:
隐式使用默认语言环境是常见的错误来源:使用
toLowerCase(Locale)
代替调用
String#toLowerCase()
或#toUpperCase()
而不指定显式区域设置是错误的常见来源。原因是这些方法将使用用户设备上的当前区域设置,即使代码在开发应用程序时似乎正常工作,它也会在某些区域设置中失败。例如,在土耳其语区域设置中,i
的大写替换为不I
。如果您希望方法只执行ASCII替换,例如转换枚举名称,请改为调用String#toUpperCase(Locale.US)
。如果您确实想使用当前的区域设置,请改为呼叫String#toUpperCase(Locale.getDefault())
。
很自然地,我在这行代码上面添加了适当的忽略注释:
//noinspection AndroidLintDefaultLocale
String table = DirectoryTableModule.DirectoryContract.TABLE_NAME.toLowerCase();
这似乎满足了IDE(Android Studio 1.2.1.1),但在我们的CI服务器(Jenkins)上运行的lint仍然显示为警告。
如果有帮助,Jenkins会显示它有Android SDK附带的lint二进制版本24.3。
如何在CI服务器上运行lint以接受此无检测注释?