Hey,
sry für den ungenauen Titel, kann's aber nicht so knapp zusammenfassen.
Die Frage stammt ursprünglich aus einem anderen Thread, dessen Frage eigentlich schon
lange gelöst ist. (Da schaut wohl keiner mehr rein) Jetz hatte der Ersteller mich aber noch eine Sache gefragt, und beim Versuch, ihm das zu erklären, habe ich gemerkt, dass ich es selber nicht so wirklich weiss..
Es ging um folgendes, der User hatte Probleme mit - sinngemäß - diesem Code:
Weil er i nicht in der doStuff() Methode übergeben kann, ohne es final zu machen. Und das geht ja
nicht, denn man inkrementiert i ja in der Schleife. So, ich hab ihm gesagt er soll sich einfach ne final
Variable innerhalb der Schleife machen und der den Wert i zuweisen, hab das wohl eher schwammig erklärt, warum
das so ist usw. ich muss das ja jetz nicht alles wiederholen.
Was ich jetzt wissen will:
1) erzeugt man mit
eine anonyme Klasse? Also nicht nur eine Instanz einer Klasse, sondern man definiert hier ne neue Klasse, oder?
Die halt dann das ActionListener Interface implementiert?
2) Wieso muss man eigentlich final Variablen übergeben? Wenn man sich ne eigene Klasse schreibt, die
das ActionListener Interface implementiert, mit nem Konstruktor dem man das i übergeben kann, geht
es ja auch ohne final:
Wieso also genau muss das final sein bei der ersten Variante? Bitte nur Antworten von echten Cracks,
die es komplett verstehen, und nicht nur Rumgerate Das hab ich selber schon gemacht als ich dem User
geantwortet hab, ich will's aber mal so richtig genau verstehen!
Danke
sry für den ungenauen Titel, kann's aber nicht so knapp zusammenfassen.
Die Frage stammt ursprünglich aus einem anderen Thread, dessen Frage eigentlich schon
lange gelöst ist. (Da schaut wohl keiner mehr rein) Jetz hatte der Ersteller mich aber noch eine Sache gefragt, und beim Versuch, ihm das zu erklären, habe ich gemerkt, dass ich es selber nicht so wirklich weiss..
Es ging um folgendes, der User hatte Probleme mit - sinngemäß - diesem Code:
Code:
for(int i = 0; i<10; i++){
// ...
something.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
doStuff (i);
}
}
}
Weil er i nicht in der doStuff() Methode übergeben kann, ohne es final zu machen. Und das geht ja
nicht, denn man inkrementiert i ja in der Schleife. So, ich hab ihm gesagt er soll sich einfach ne final
Variable innerhalb der Schleife machen und der den Wert i zuweisen, hab das wohl eher schwammig erklärt, warum
das so ist usw. ich muss das ja jetz nicht alles wiederholen.
Was ich jetzt wissen will:
1) erzeugt man mit
Code:
something.addActionListener(new ActionListener(){})
Die halt dann das ActionListener Interface implementiert?
2) Wieso muss man eigentlich final Variablen übergeben? Wenn man sich ne eigene Klasse schreibt, die
das ActionListener Interface implementiert, mit nem Konstruktor dem man das i übergeben kann, geht
es ja auch ohne final:
Code:
for(int i = 0; i<10; i++){
// ...
something.addActionListener(new MyListener( i ));
}
Wieso also genau muss das final sein bei der ersten Variante? Bitte nur Antworten von echten Cracks,
die es komplett verstehen, und nicht nur Rumgerate Das hab ich selber schon gemacht als ich dem User
geantwortet hab, ich will's aber mal so richtig genau verstehen!
Danke