G
Guest
Gast
Gerade eben habe ich einen Artikel zu "Lucene with OJB" gelesen und dabei fallen mir
im Code des Authors ziemlich viele Variablen (innerhalb von Methoden) auf, die mit
final deklariert sind.
z.B.
In C++ war dieses Attribut immer dazu gedacht, Variablen bzw. Methodenargumente,
die "nicht verändert" werden, explizit zu kennzeichnen.
Dadurch war an manchen Stellen Pass-By-Reference unkritisch (statt Pass-By-Value).
Im obigen Code wird das Document-Objekt verändert, trotzdem ist es syntaktisch korrekt.
Was bringt dann "final" bei Methodenparametern bzw. lokalen Variablen innerhalb einer
Methode überhaupt, wenn diese trotzdem verändert werden?
Nur mal so ein Gedanke... :bahnhof:
im Code des Authors ziemlich viele Variablen (innerhalb von Methoden) auf, die mit
final deklariert sind.
z.B.
Code:
public void add(final Student student) throws ServiceException {
final Document doc = new Document();
doc.add(Field.Text(NAME, student.getName()));
doc.add(Field.Text(ID_NUMBER, student.getIdNumber()));
doc.add(Field.Text(ADDRESS, student.getAddress()));
doc.add(Field.Text(PHONE, student.getPhone()));
doc.add(Field.UnIndexed(IDENTITY, student.getId().toString()));
try {
synchronized (mutex) {
final IndexWriter writer = new IndexWriter(index, analyzer, false);
writer.addDocument(doc);
writer.optimize();
writer.close();
}
}
catch (IOException e) {
throw new ServiceException("Unable to index student", e);
}
}
die "nicht verändert" werden, explizit zu kennzeichnen.
Dadurch war an manchen Stellen Pass-By-Reference unkritisch (statt Pass-By-Value).
Im obigen Code wird das Document-Objekt verändert, trotzdem ist es syntaktisch korrekt.
Was bringt dann "final" bei Methodenparametern bzw. lokalen Variablen innerhalb einer
Methode überhaupt, wenn diese trotzdem verändert werden?
Nur mal so ein Gedanke... :bahnhof: