为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?

查看由Android Studio和Gradle插件生成的BuildConfig类时,可以看到BuildConfig.DEBUG字段使用Boolean.parseBoolean(String)调用进行初始化,而不是使用其中一个布尔文字truefalse

当我使用Gradle添加自定义构build属性时,我只需要这样做:

 android { buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true' } 

但是查看生成的BuildConfig告诉我,Google采取了与DEBUG标志不同的方法:

 public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); // more fields here // Fields from build type: debug public static final boolean SOME_SETTING = true; } 

使用Boolean.parseBoolean(String)而不是文字有什么好处?

Solutions Collecting From Web of "为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?"

BuildConfig类中的布尔文字会在代码中使用时产生IDE警告(至less在Android Studio中)。 例如,当在布尔expression式中使用它时,Android Studio将(错误地)推荐简化布尔expression式,因为常量值总是相同的(对于当前的构build变体)。

Android Studio由于缺少构建配置知识而产生代码警告

这个警告只是因为Android Studio不知道BuildConfig.SOME_SETTING中的最终值可能与其他构build变体不同。

为了保持代码干净且没有警告,您可以通过添加IDE注释来告诉Android Studio忽略此特定警告:

添加代码注释以忽略IDE警告

但是这又会给代码增加一些噪音,降低可读性。 通过使用Boolean.parseBoolean(String)方法来初始化常量字段,您实际上欺骗了Android Studio,它将不再能够完全分析您的布尔expression式,因此不会再生成警告。

使用parseBoolean(String)来防止IDE警告

这种方法非常有用,因为它可以保持代码清洁可读,而不必closures重要的代码分析和生成警告。