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



## XFlipX (1. Mrz 2010)

Hallo,

folgender Sachverhalt führt zur obiger Fehlermerldung:


```
public SettingsDlg(ModelClass modelClass, Settings settings)
	{
		//Übergabe der Referenzen der Instanzen an lokale Objektvariablen
		this.modelClass = modelClass;
		this.settings = settings;
......

         settingsBtnPnl.getOkBtn().addActionListener(
		new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				settings.writeSettings();
				dirEdit.searchFiles();
				settingsDlg.setVisible(false);
				settingsDlg.dispose();
			}		
		}
	);
```

Innerhalb der anonymen Klasse "ActionListener" in der Methode "actionPerformed" meckert der Compiler über das "settings" und bringt die Fehlermeldung, die im Titel meines Posts steht. Irgendwie bin ich aber nicht ganz schlau daraus geworden, was im Einzelnen hinter dieser Fehlermeldung steht.

Danke, XFlipX


----------



## Landei (1. Mrz 2010)

Schreib

```
public SettingsDlg(ModelClass modelClass, final Settings settings)
```
und es sollte gehen.


----------



## Foermchen82 (2. Mrz 2010)

Das funktioniert zwar, aber immer alles als final machen ist auch nicht so ganz hübsch.

So wie ich das sehe wird der MethodenParameter in eine KlassenVariable geschrieben. Dann kann doch die dann gleich verwendet werden im Listener. Damit die nun nicht final sein muss, greift man folgendermaßen darauf zu:


```
Klassenname.this.settings
```


----------



## FArt (2. Mrz 2010)

> Das funktioniert zwar, aber immer alles als final machen ist auch nicht so ganz hübsch.


Was soll das denn heißen? final ist ein guter Hinweis an den Compiler und eine gute Art für selbstdokumentierenden Code.


----------



## XFlipX (2. Mrz 2010)

Danke für die Hilfe. Ich war auch etwas skeptisch bezüglich final aber im Endeffekt ist "settings" ja nur eine Referenz auf die Instanz der Klasse Settings. Ob ich die nun als Konstante deklariere ist hier eher unerheblich.

XFlipX


----------

