Nonfinal in Enclosing Type realisieren

Hallo zusammen,
Ich möchte gerne folgenden Code realisieren:

		JPanel kritSelectionPanel = new JPanel();
		
		JCheckBox selectBox = new JCheckBox();

		selectBox.setActionCommand(k.getName());
		selectBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				toggleSelection((JCheckBox) e.getSource(), k);
				
			}

			
		});
		return kritSelectionPanel;
	}```

Das Problem ist, dass ich im ActionListener die Methode ```toggleSelection((JCheckBox) e.getSource(), k);``` nicht aufrufen kann, da k nicht final ist. Gibt es eine Möglichkeit, k in die Methode zu setzen ohne es final zu machen und ohne eine globale Variable zu definieren?

Falls es wichtig ist: Ich schreibe in Java 1.6.

Du könntest eine finale Zwischenvariable setzen - aber den Parameter final zu setzen wäre die bessere Variante. Denn Parameter solltest du nicht überschreiben. Hatte damit schon Probleme, weil Kollegen nicht der Meinung waren und sich zwischendrin die Variable geändert hat. Das hat zu unschönen Effekten geführt. Damals habe ich mir daraufhin mein Eclipse so eingestellt, dass es beim speichern automatisch alle Parameter final setzt.

Okay dann dazu noch eine Anfängerfrage weil ich so gut wie nie mit final arbeite: Wenn k final ist, dann kann ich die Werte von k doch noch ändern, oder? Also Methoden wie k.setName(“neuer Name”) funktionieren dann noch oder?

Ja. Nur k selbst ist final. k.setName("Blubb"); geht, k = new Kriterium(1, 2, 3); geht nicht.

Ja, mit dem Objekt an sich kannst du wie gewohnt arbeiten. Aber es ist nicht möglich dem Parameter ein anderes Objekt zuzuweisen.

Okay dann hab ich meinen Java-Grundkurs doch noch richtig in Erinnerung, danke :slight_smile: