Ich habe eine Klasse, welche Textdateien einliest. Der Aufruf funktioniert normalerweise so:
FullTextFileReader reader = new FullNormalTextFileReader(filename, charset);
reader.setLineDescription("XYZ-Daten");
reader.setProgressTextStart("Einlesen");
//reader.skipFirstLine();
reader.beQuiet();
reader.read(line -> analyseLine(line));
die Methode reader.read()
erwartet als Parameter ein Objekt vom Typ des Interfaces NotEmptyLineAnalyzer
. Dieses sieht wie folgt aus:
public interface NotEmptyLineAnalyzer {
void analyseLine(String line);
}
Dementsprechend habe ich dann in der benutzenden Klasse eine Methode
private void analyseLine(String line) {
// ...
}
In der ich die nicht-leeren Zeilen der Datei verarbeite.
So weit ist mit alles klar.
Ich kann aber auch folgendes schreiben, ohne etwas am Interface verändert zu haben:
FullTextFileReader reader = new FullNormalTextFileReader(filename, charset);
reader.setLineDescription("XYZ-Daten");
reader.setProgressTextStart("Einlesen");
//reader.skipFirstLine();
reader.beQuiet();
reader.read(line -> analyseLine(line, reader.getLineNumber()));
und eine Methode
private void analyseLine(String line, int lineNumber) {
// ...
}
verwenden, die die Zeile und die Zeilennummer (z.B. für Ausnahmen etc.) erhält.
Meine Frage ist nun, wieso das funktioniert, da das Interface ja ganz klar analyseLine
als Methode mit einem Parameter definiert.