Недавно я обнаружил, что AndroidStudio напоминает мне удалить некоторые классы. Я помню, что в старые времена нам приходилось приводить результат findViewById, но теперь это не обязательно.
Результат findViewById по-прежнему View, поэтому я хочу знать, почему нам не нужно приводить класс?
Я не могу найти никаких документов, упомянутых, кто-нибудь может найти какой-либо документ?
android
casting
findviewbyid
Эрик Чжао
источник
источник
<T extends View> T findViewById(int id)
?Ответы:
Начиная с API 26,
findViewById
использует логический вывод для своего типа возвращаемого значения, поэтому вам больше не нужно приводить.Старое определение:
Новое определение:
Так что если вам
compileSdk
по крайней мере 26, это означает, что вы можете использовать это :)источник
ClassCastException
.Согласно этой статье :
источник
В старых версиях:
Из Android Studio 3.0 с SDK 26:
источник
Android Studio напоминает об удалении приведения, если вы используете общие атрибуты из класса View , например, видимость или некоторые распространенные методы, такие как onClick ().
Например:
В этом случае вы можете просто написать:
источник
Android 0, очистить кастинг
Одна из вещей, которую google объявляет в IO 2017, называется «выбрасывать» :). Разработчик Android не должен выполнять кастинг вручную для findViewById (). Например, старый способ получить текстовое представление с помощью findViewById () будет выглядеть примерно так.
Пока новый путь будет таким
Это простое изменение. Но для опытного программиста чистый код, подобный этому, может сделать вас очень счастливым, и это поможет вам настроиться программировать :)
Чтобы сделать это, вам нужно было только установить версию скомпилированного SDK вашего проекта на версию 26 в вашем build.gradle приложения.
Вы все еще можете использовать более раннюю версию SDK, так что это ненавязчивые изменения.
Теперь реальная проблема, как вы чистите тот старый код, который использует приведение все это время. Особенно, когда у вас есть как сотни файлов деятельности. Вы можете сделать это вручную, или, возможно, нанять стажера, чтобы сделать это 😛. Но, к счастью для всех этих интернов, андроид студия уже готова помочь нам в этом.
Когда вы кладете свою карету (или нажимаете на избыточное приведение), студия андроида предложит 2 варианта обработки избыточного преобразования.
Сначала будет предложено удалить это избыточное приведение, или вы можете выбрать очистить код. Это удалит все лишние преобразования для этого файла. Это лучше, но мы хотим большего. Мы не хотим открывать каждый файл и очищать его один за другим.
Особенностью идеи IntelliJ является то, что эта функция называется намеренным действием. Все, что вам нужно сделать, это нажать Ctrl + Shift + A, а затем набрать clean. Выберите действие «Очистка кода» и выделите весь объем проекта. С помощью этих нескольких простых шагов ваш код станет намного чище.
Одним из важных моментов является то, что вы делаете это с некоторой системой управления версиями кода. Таким образом, вы можете сравнить изменения, внесенные действием намерения, и отменить любые файлы, которые вы хотите.
Скопировано из оригинального поста:
https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef
источник
why
, а неhow
:The result of findViewById is still View, so i want to know why we don't need to cast the class?
В исходном коде
ViewGroup
есть приведение аргумента возврата. Так что нет необходимости снова разыгрывать:источник