Error: The final local variable variable cannot be assigned, since it is defined in an enclosing typ

computersport

Aktives Mitglied
Ich habe diese Methode in meiner Klasse eingefügt und wollte jetzt den Result des Callback in der Variable speichern Zeile 17 und dann per Return zurück geben leider erhalte ich den im Titel erwähnten Fehler: The final local variable variable cannot be assigned, since it is defined in an enclosing typ

Ich bin mir nicht sicher wie ich das am besten löse bzw wie ich das überhaupt löse.
Da dies keine Klassenvariable ist kann ich auch nicht auf diese zugreifen.

Hat jemand nen Tip wie ich da vorgehen sollte?

Java:
	private String UsernamenHolen(int Id) {
		final String variable = null;
		UserAdminAsync service = (UserAdminAsync) GWT
		.create(UserAdmin.class);
		ServiceDefTarget serviceDef = (ServiceDefTarget) service;
		serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()
				+ "login");
		AsyncCallback<String> callback = new AsyncCallback<String> () {

			@Override
			public void onFailure(Throwable caught) {
							
			}

			@Override
			public void onSuccess(String result) {
				variable = result;
				
			}
			
		};
		
		service.GetNick(Id, callback);
		
		return variable;
		
	}
 
Deine Variable ist final, von daher darfst du später kein neues Objekt von ihr erzeugen (was sich bei einem String eher nicht vermeiden lässt 😉 ). Du könntest stattdessen bspw. einen finalen StringBuilder bzw. StringBuffer verwenden und dann den Text via append (ohne das Objekt neu zu initialisieren) anhängen und später dann auslesen bzw. via toString() zurückliefern.
 
Eine andere, etwas unsaubere Technik, die aber dafür bei allen Datentypen funktioniert, ist ein Feld der Länge eins:

Java:
        final String[] variable = new String[1];
            ...
            public void onSuccess(String result) {
                variable[0] = result;
            }
 
Oder die schönere Variante
Java:
public class Container<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
mit
Java:
final Container<String> variable = new Container<String>();
und
Java:
public void onSuccess(String result) {
    variable.setData(result);
}
 
Oder die schönere Variante
Java:
public class Container<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
mit
Java:
final Container<String> variable = new Container<String>();
und
Java:
public void onSuccess(String result) {
    variable.setData(result);
}

Besten Dank das hat mein Problem gelöst.
 

Zurück
Oben