Почему класс BuildConfig использует Boolean.parseBoolean() вместо буквенных значений?

При просмотре класса BuildConfig, сгенерированного Android Studio и плагином Gradle, можно увидеть, что поле BuildConfig.DEBUG инициализируется с помощью вызова Boolean.parseBoolean(String) вместо использования одного из булевых литералов true или false.

Когда я добавляю пользовательские свойства сборки с помощью Gradle, я просто делал бы это так:

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) вместо литералов?

Ответ 1

Булевы литералы внутри класса BuildConfig собираются выпустить предупреждения IDE при их использовании в вашем коде (по крайней мере, в Android Studio). Например, при использовании в булевом выражении Android Studio (ошибочно) рекомендует упростить логическое выражение, потому что постоянное значение всегда одно и то же (для текущего варианта сборки, который есть).

Android Studio producing code warning because of missing build configuration knowledge

Это предупреждение происходит только потому, что Android Studio не знает, что конечное значение внутри BuildConfig.SOME_SETTING может отличаться для других вариантов сборки.

Чтобы код был чистым и без предупреждений, вы можете сказать Android Studio игнорировать это конкретное предупреждение, добавив комментарий IDE следующим образом:

Add code comments to ignore IDE warnings

Но опять-таки это добавит некоторый шум в код и уменьшит читаемость. Используя метод Boolean.parseBoolean(String) для инициализации вашего постоянного поля, вы фактически обходите Android Studio, которая больше не сможет полностью анализировать ваши булевы выражения, тем самым не генерируя предупреждений больше.

Use parseBoolean(String) to prevent IDE warnings

Этот подход очень полезен, поскольку он сохраняет ваш код в чистоте и читабельности, не отключая важный анализ кода и генерируя предупреждения.