Les premiers jours nous savons que nous avons besoin de jeter chaque type de retour d' findViewById()
méthode. Comme
de la manière habituelle
TextView textView = (TextView) findViewById(R.id.textView);
Ce gars manière
TextView textView = $(R.id.textView);
Il a ignoré typecasting par sa méthode générique.
Donc, le gars a utilisé Java générique d'ignorer le type coulée de tous les findViewById();
. Si vous ne comprenez pas les Génériques, veuillez lire Pourquoi utiliser des génériques.
protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
Alors maintenant, il n'a pas besoin de type cast
TextView textView = $(R.id.textView);
L'explication de cette méthode.
- Il a créé une méthode qui acceptent id de ressource. Donc, il peut passer à un Id.
- Il a annoté ce paramètre en
@IdRes
alors que Android Studio autoriser uniquement les id de ressource dans ce paramètre.
- Puis, il a appelé super méthode de la classe
findViewById
qui renvoie Vue.
- Il est retourné
<T extends View>
à partir de la méthode, de sorte que vous aurez toujours l'objet de Vue dans le type de retour.
Important
Maintenant, vous n'avez pas besoin de faire de vos méthodes génériques. Parce qu'Android lui-même a changé sa méthode. Voir Android Oreo Changements pour findViewById()
.
Toutes les instances de la findViewById() la méthode maintenant de retour
T au lieu de Vue.
Maintenant, vous peut également faire le même comme le gars sans typecasting
TextView textView = findViewById(R.id.textView);