# Innere Klasse: Zugriff auf äußere Variable



## scooterJava (17. Feb 2009)

Ich erhalte die Meldung


> Cannot refer to a non-final variable myvar inside an inner class defined in a different method


wenn ich in der inneren Klasse auf die Variable zugreifen will (Java 5);

```
int myvar = 0;
SwingUtilities.invokeLater( new Runnable()
{
	public void run()
	{
		myvar = 1;
	}
} );
```
Die Variable soll nicht final sein; ich will sie noch bearbeiten können. Wie schreibe ich es richtig?


----------



## SlaterB (17. Feb 2009)

z.B.

```
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        SwingUtilities.invokeLater(new Runnable()
            {
                private int myvar;

                public void run()
                {
                    myvar = 1;
                }
            });

    }

}
```

eine lokale Variable der aufrufenden Methode zu ändern macht keinen Sinn,
diese Methode könnte schon längst zu Ende sein


----------



## scooterJava (17. Feb 2009)

Vielleicht verstehe ich es falsch, aber die geänderte Variable soll nachher außerhalb der inneren Klasse über Return zurückgegeben werden. Wenn ich private verwende, ist sie außerhalb des Scopes nicht sichtbar, oder?


----------



## SlaterB (17. Feb 2009)

korrekt,

und das geht nunmal so nicht,
am Ende der äußeren Methode willst du myvar zurückgeben, aber SwingUtilities.invokeLater() wird erst 100ms später ausgeführt, das passt doch nicht zusammen,

du könntest allerdings ein final OBJEKT verwenden, z.B. ein int[1],
dieses Objekt läßt sich sich umherverteilen und es ist relativ egal, wann dort der Wert verändert wird


----------



## byte (17. Feb 2009)

Runnables haben keinen Rückgabewert. Verwende stattdessen Callables (siehe Java 5 Concurrency API).


----------



## The_S (18. Feb 2009)

byto hat gesagt.:


> Runnables haben keinen Rückgabewert. Verwende stattdessen Callables (siehe Java 5 Concurrency API).



oO? Das kannte ich noch gar nicht. *anguck und merk*

Danke


----------

