2015-05-03 24 views
6

Ich habe Code wie folgt innerhalb einer Methode:letzte Variable kann nicht initialisiert

final TouchableSpan touchableSpan = new TouchableSpan() { 

    @Override 
    public void onClick(View widget) { 
     this.setPressed(true); 

     String extravar = touchableSpan.getMyVar(); 
    } 

Auf dieser Linie String extravar = touchableSpan.getMyVar(); ich eine Warnung erhalten, dass variable touchableSpan möglicherweise nicht initialisiert worden sind. Warum gibt es?

Diese Warnung erschien, als ich final Modifizierer hinzufügte. Bevor ich variable is access from inner class, needs to be declared final hatte.

+1

Überlegen Sie, ob 'TouchableSpan' einen Konstruktor' TouchableSpan() {this.onClick (null);} 'oder ähnliches hat. – immibis

+1

Das hat definitiv einen "schlechten Geruch". Wenn Ihre Methode 'onClick()' wirklich auf ein Element ** außerhalb der Klasse 'TouchableSpan' zugreifen muss, dann sollten Sie dieses "äußere Element" beispielsweise über einen Konstruktor bereitstellen. Ihr Code koppelt den Teil, der ein neues TouchableSpan-Objekt erzeugt, extrem mit dem Code dieser Klasse. Tu das nicht! – GhostCat

+0

@ Jägermeister, ja, ich werde 'this.getMyVar() 'als' @ Tagir' vorschlagen. –

Antwort

9

Zuerst erstellen Sie eine anonyme Klasse und weisen sie dann der endgültigen Variablen zu. Daher könnte Ihre onClick-Methode theoretisch vor der endgültigen Variableninitialisierung aufgerufen werden. Warum nicht einfach this.getMyVar() verwenden?

Verwandte Themen