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



## computersport (26. Aug 2010)

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?


```
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;
		
	}
```


----------



## The_S (26. Aug 2010)

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.


----------



## Landei (26. Aug 2010)

Eine andere, etwas unsaubere Technik, die aber dafür bei allen Datentypen funktioniert, ist ein Feld der Länge eins:


```
final String[] variable = new String[1];
            ...
            public void onSuccess(String result) {
                variable[0] = result;
            }
```


----------



## faetzminator (26. Aug 2010)

Oder die schönere Variante

```
public class Container<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
```
mit

```
final Container<String> variable = new Container<String>();
```
und

```
public void onSuccess(String result) {
    variable.setData(result);
}
```


----------



## computersport (30. Aug 2010)

faetzminator hat gesagt.:


> Oder die schönere Variante
> 
> ```
> public class Container<T> {
> ...



Besten Dank das hat mein Problem gelöst.


----------

