Почему я не могу проверить тип экземпляра после исключения приведения класса? - PullRequest
0 голосов
/ 29 сентября 2019

Может кто-нибудь объяснить мне, почему следующий блок кода выделен как ошибка в Android Studio?

IDE говорит, что elem instanceof SubtypeB всегда ложно - это просто ошибка инспектора или это реальная языковая деталь, о которой мне нужно узнать? . Могу ли я безопасно отключить предупреждение и сохранить текущий код?

Пример кода:

for (Parcelable elem : list) {
    try {
        listOfSubtypeA.add( (SubtypeA) elem );
    } catch (ClassCastException cce) {
        //Line below is highlighted as always false
        if (elem instanceof SubtypeB) {
            ... //just logging
        }
    }
}

1 Ответ

1 голос
/ 29 сентября 2019

Это неверно из вашей IDE. Просто запустите его:

 interface Test123  { }
static class SubtypeA implements Test123{ }
static class SubtypeB implements Test123 { }

public static void main(String[] args) {
    List<Test123> list = new ArrayList<>();
    list.add(new SubtypeB());
    List<SubtypeA> subList = new ArrayList<>();

    for (Test123 elem : list) {
        try {
            subList.add( (SubtypeA) elem );
        } catch (ClassCastException cce) {
            //Line below is highlighted as always false
            if (elem instanceof SubtypeB) {
                System.out.println("cce = " + cce);
        //just logging
            }
        }
    }
}

Вы увидите, что утверждение if (elem instanceof SubtypeB) оказывается верным, поэтому ваша IDE не может определить его правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...