Niedawno odkryłem, że AndroidStudio przypomina mi o usunięciu niektórych rzutów klas. Pamiętam, że w dawnych czasach musieliśmy rzutować wynik findViewById, ale teraz nie jest to konieczne.
Wynikiem findViewById nadal jest View, więc chcę wiedzieć, dlaczego nie musimy rzutować klasy?
Nie mogę znaleźć żadnych wymienionych dokumentów, czy ktoś może znaleźć jakiś dokument?
android
casting
findviewbyid
Eric Zhao
źródło
źródło
<T extends View> T findViewById(int id)
?Odpowiedzi:
Począwszy od API 26,
findViewById
używa wnioskowania dla swojego typu zwracanego, więc nie musisz już rzutować.Stara definicja:
Nowa definicja:
Więc jeśli masz
compileSdk
co najmniej 26 lat, oznacza to, że możesz to wykorzystać :)źródło
ClassCastException
.Zgodnie z tym artykułem :
źródło
W starszych wersjach:
Z Android Studio 3.0 z SDK 26:
źródło
Android Studio przypomina o usunięciu rzutowania, jeśli używasz wspólnych atrybutów z klasy View , takich jak widoczność lub niektóre typowe metody, takie jak onClick ()
Na przykład:
W takim przypadku możesz po prostu napisać:
źródło
Android 0, wyczyść przesyłanie
Jedną z rzeczy, które Google ogłasza na IO 2017, jest coś, co nazywa się „odrzuceniem” :). Deweloper Androida nie musi wykonywać ręcznego rzutowania dla findViewById (). Na przykład stary sposób uzyskiwania widoku tekstu przy użyciu funkcji findViewById () wyglądałby mniej więcej tak.
Podczas gdy nowy sposób wyglądałby tak
To prosta zmiana. Ale dla doświadczonego programisty taki czysty kod może sprawić, że będziesz bardzo szczęśliwy i pomoże ci w nastroju do kodowania :)
Aby móc to zrobić, wystarczyło ustawić wersję skompilowanego zestawu SDK projektu na wersję 26 w aplikacji build.gradle.
Nadal możesz kierować reklamy na wcześniejszą wersję sdk, więc są to nieinwazyjne zmiany.
Teraz prawdziwy problem, jak wyczyścić ten stary kod, który przez cały czas używa rzutowania. Zwłaszcza, gdy masz setki plików aktywności. Możesz to zrobić ręcznie, a może zatrudnić do tego stażystę 😛. Na szczęście dla wszystkich stażystów studio Android jest już przygotowane, aby nam w tym pomóc.
Po umieszczeniu karetki (lub kliknięciu nadmiarowego odlewania) studio Android zasugeruje 2 opcje obsługi nadmiarowego przesyłania.
Najpierw zasugeruje usunięcie tego nadmiarowego rzutowania lub możesz wybrać wyczyść kod. Spowoduje to usunięcie wszystkich nadmiarowych rzutów dla tego pliku. Tak jest lepiej, ale chcemy więcej. Nie chcemy otwierać każdego pliku i czyścić tego po kolei.
Jedną z rzeczy, które sprawiają, że pomysł IntelliJ jest wyjątkowy, jest funkcja zwana zamierzoną akcją. Wszystko, co musisz zrobić, to nacisnąć ctrl + shift + A, a następnie wpisać clean. Następnie wybierz akcję Oczyszczanie kodu i wybierz cały zakres projektu. Dzięki tym kilku prostym krokom Twój kod będzie o wiele bardziej przejrzysty.
Ważną kwestią jest to, że robisz to za pomocą jakiegoś systemu wersjonowania kodu. W ten sposób możesz porównać zmiany wprowadzone przez akcję zamierzoną i przywrócić dowolne pliki, które chcesz.
Skopiowano z oryginalnego posta:
https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef
źródło
why
, niehow
:The result of findViewById is still View, so i want to know why we don't need to cast the class?
W kodzie źródłowym
ViewGroup
znajduje się rzutowanie zwracanego argumentu. Nie ma więc potrzeby ponownego rzucania:źródło