Android Final vs Private Textansichten

8

einfache vielleicht dumme Frage. Ich habe eine Login-Aktivität, die eine andere Aktivität startet, und hier ist der Code:

%Vor%

Meine Frage betrifft die Textansichten. Eclipse sagte im Grunde, dass ich sie final machen musste, um sie im onClick-Event des Buttons zu verwenden. NP, also habe ich das gemacht und es hat funktioniert.

Die Frage ist: Was ist der Unterschied zwischen dem Setzen dieser über dem @Override als privat vs. innerhalb des OnCreate als endgültig?

    
user1848850 24.11.2012, 03:12
quelle

2 Antworten

6

Dies hat mit Schließung in Java zu tun . Wenn Sie eine anonyme Klasse verwenden, werden die Werte (nicht die Objekte selbst), die in ihr verwendet werden, zur Verwendung in diese Klasse kopiert. Daher ist es nicht sinnvoll, diese Variablen innerhalb der Klasse zurückzugeben oder zu ändern, daher müssen sie final sein.

Wenn die Variable jedoch stattdessen Teil der Klasse ist, die die anonyme Klasse enthält, ist das anders. Grundsätzlich hat Ihre innere Klasse einen Verweis auf das Objekt LoginActivity (als LoginActivity.this ) und kann ihre Mitglieder und Methoden verwenden und ändern.

Wenn Sie sie "über den @Override" setzen, machen Sie sie zu Membervariablen der Klasse LoginActivity . Daher kann auf sie von der anonymen Klasse zugegriffen werden.

Kurz gesagt besteht der Unterschied darin, dass final Variablen lokal für die Methode sind und in die anonyme Klasse kopiert werden; Mitgliedsvariablen sind lokal für die enthaltene Klasse und werden von der anonymen Klasse geändert.

Wenn Sie die Daten aus der anonymen Klasse später wiederverwenden möchten, verwenden Sie eine Elementvariable. Wenn Sie es nur in onCreate() und in der anonymen Klasse benötigen, reicht eine final Variable aus.

    
Eric 24.11.2012, 03:35
quelle
2

Wenn Sie das TextView-Feld (oder ein beliebiges Feld) als öffentlich deklarieren, kann es direkt von jeder anderen Klasse aufgerufen werden, was meiner Meinung nach nicht Ihre Absicht ist. Es gibt keinen Grund, die TextView-Variable öffentlich zu machen.
Wenn es als privat festgelegt ist, gibt es eine Garantie, dass sein Wert in einer anderen Klasse nicht überschrieben wird. Genau dafür wurde das Schlüsselwort final entwickelt. Also, setze es einfach als privat und du musst dir keine Sorgen machen, dass Eclipse dich korrigiert.
Zusammengefasst: Wenn das Feld privat / final gemacht wird, ist sichergestellt, dass der Wert nicht von einer anderen Klasse überschrieben werden kann, was ein gutes Design ist.

Hoffe, dass diese Wanderung hilft. Ich werde froh sein, es besser zu erklären, wenn es nicht tut.

    
Kneel-Before-ZOD 24.11.2012 03:37
quelle

Tags und Links