Ich bin gerade auf diese interessante Nachricht vom Compiler gestoßen und ich weiß nicht, warum es passiert. Hier ist der Fall
Beispiel 1.
%Vor%Beispiel 2.
%Vor% Im ersten Beispiel muss ich ein Objekt, das von findViewById
zurückgegeben wurde, in Button
umwandeln. Im zweiten Beispiel muss ich das zurückgegebene Objekt nicht umwandeln, weil ich kein anderes Button
-Klassenobjekt verwendet habe. Wenn ich versuche, es über
Ich bekomme die Warnung Casting findViewById(R.id.someButtonId) to Button is redundant
.
Warum passiert das? Ich versuche nicht, die Warnmeldung zu entfernen. Ich möchte die Logik dahinter kennen und warum Casting nicht benötigt wird, wenn ich nicht versuche, ein anderes Objekt mit dem von findViewById
zurückgegebenen Objekt zu initialisieren.
Der Grund dafür ist, dass findViewById
View
zurückgibt und diese Klasse bereits die Methode setOnClickListener
definiert. Dies bedeutet, dass Sie ohne Zuhilfenahme der Besetzung den Hörer einstellen können. Somit ist deine Besetzung überflüssig.
Die findViewById () gibt immer View zurück, das übergeordnete Elemente aller Views ist, wie ImageView, Button ...
Der setOnClickListener ist eine Methode der View-Klasse. So können Sie die Klickereignisse einfach erfassen, ohne sie auf Button zu übertragen. Ich denke damit nur, dass es überflüssig ist.
Der Grund dafür ist, dass Sie in Beispiel 1 explizit einen Button suchen müssen, da Sie ihn einer Button-Variablen zuweisen.
Der OnClickListener ist für jeden View-Typ gedacht, sodass Sie ihn nicht in eine bestimmte Unterklasse von View umwandeln müssen, um einen OnClickListener für ihn festzulegen.
Es passiert, weil Sie View
nicht in Button
eingeben müssen, um setOnClickListener
aufzurufen, das in View
definiert ist. Es reicht, findViewById(R.id.someButtonId).setOnClickListener(this);
Tags und Links android button casting findviewbyid