Почему троичный оператор Java заставляет компилятор думать, что эта строка будет пустой?

#java #android #ternary-operator

#java #Android #ternary-operator

Вопрос:

 String colorString = myObject.getColor(); // "0000ff"
colorString = colorString == null ? "#44FF0000" : "#44"   colorString;
int myColor = Color.parseColor(colorString); // Length must be at least 1
  

Color.parseColor(String colorString) из android.graphics библиотеки аннотируется с @Size(min=1) помощью from android.annotation.Size . Почему компилятор считает, что результирующая строка приведенной выше троичной операции может быть пустой, в то время как приведенный ниже код работает?

  String colorString = myObject.getColor(); // "0000ff"
 if (colorString == null) {
     colorString = "44FF0000";
 } else {
     colorString = "#44"   colorString;
 }
 int myColor = Color.parseColor(colorString); // all's good
  

Комментарии:

1. какую ошибку компилятора вы получаете?

2. библиотека аннотируется с помощью @Size(min=1) из модели проверки Bean. … нет, с android.annotation.Size

3. моя вина, ошибка компилятора такова Length must be at least 1

4. Это скорее Ворсистый намек

5. Я бы создал отчет об ошибке, а затем либо подавил предупреждение, либо использовал инструкцию if / else .