Earlier days we know we needed to cast every return type of findViewById()
method. Like
usual way
TextView textView = (TextView) findViewById(R.id.textView);
This guy way
TextView textView = $(R.id.textView);
He ignored typecasting by his generic method.
So the guy used Java generic to ignore type casting all the findViewById();
. If you don't understand Generics, please read Why to use generics.
protected <T extends View> T $(@IdRes int id) {
return (T) super.findViewById(id);
}
So now he doesn't need to type cast
TextView textView = $(R.id.textView);
Explanation of this method.
- He created a method which accept resource id. So he can pass an Id.
- He annotated this parameter by
@IdRes
so that Android Studio only allow resource ids in this parameter.
- Then he called super class method
findViewById
which returns View.
- He returned
<T extends View>
from method, so you will always have View object in return type.
Important
Now you don't need to make your generic methods. Because Android itself has changed his method. See Android Oreo Changes for findViewById()
.
All instances of the findViewById() method now return
T instead of View.
Now you also can do same like that guy without typecasting
TextView textView = findViewById(R.id.textView);