Casting to Button ist überflüssig - Warum?

8

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

zu übertragen %Vor%

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.

    
sandalone 01.03.2012, 10:32
quelle

5 Antworten

6

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.

    
Boris Strandjev 01.03.2012, 10:40
quelle
2

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.

    
Sadeshkumar Periyasamy 01.03.2012 10:40
quelle
2

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.

    
Eric Nordvik 01.03.2012 10:40
quelle
1

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);

zu machen     
devmiles.com 01.03.2012 10:40
quelle
0

Ich rate setOnClickListener () ist eine Methode in der Ansicht und nicht die Schaltfläche, und so yep: die Besetzung ist redundant.

    
John3136 01.03.2012 10:40
quelle