Schlagwort-Archive: Java

Java – for-each rettet einen

Heute sollte ich einen Fehler im fremden Code heraus finden. Das Java-Programm warf folgende Exception aus:

java.util.ConcurrentModificationException

Tja, es wurde auf jeden Fall von einer ArrayList-Collection geworfen. Meine erste Vermutung war, das zwei Threads auf dieser ArrayList schreiben. Also auf den thread-sicheren Vector umsteigen? Hat aber nichts geholfen.

Weiterlesen

Java – Achtung Falle: Boolean parsen

Heute musste ich aus einem XML-File eine Boolean-Konfiguration laden. Das habe ich nicht das erst mal gemacht, aber es ist auch nichts, was ich täglich mache:

Element node = element.getChild("Editor");
String str = node.getAttributeValue("Overwrite"); 
// str hat "true"
m_settings = new EditorSettings(Boolean.getBoolean(str));

Bitte einfach mal den Code auf sich wirken lassen… Weiterlesen

Java – immutable Objects

Wenn wir Software entwickeln, ist eines unserer Ziele unvorhersehbare Seiteneffekte zu vermeiden. Ich war mal vor knapp zehn Jahren in einem Projekt, in dem ein Kollege bei aufgetauchten Fehlern im System zum Auftraggeber sagte „Oh! Das ist leider ein Seiteneffekt.“. Irgendwann meinte der Auftraggeber genervt „Ich will das Wort Seiteneffekt nicht mehr hören!“.

Wie kann man solche Fälle minimieren? Ein Punkt ist die richtige Datenkapselung, wie ich hier bereits zeigte. Ein weiterer Punkt ist, Daten einfach unveränderlich zu machen. Denn wodurch entstehen mysteriöse Seiteneffekte? Wenn sich Objekte im Wert ändern, ohne das man es selbst veranlasst oder mitbekommen hat! Weiterlesen

Javas kaputte Datenkapselung

Meiner Erfahrung nach werden in Objekt-Orientierungs-Diskussionen folgende drei Punkte genannt, auch in dieser Priorität, die die Objektorientierung ausmachen sollen:

  1. Vererbung von Klassen
  2. Schnittstellen
  3. Kapselung

Ist Vererbung wirklich das was Objektorientierung ausmacht? Immerhin ist Vererbung nicht bei jeder Klasse notwendig, sondern nur von Fall zu Fall nötig. Streichen wir also den ersten Punkt von unserer Liste!

Die Schnittstellen, also Funktionen einer Klasse, ermöglichen die Kommunikation mit dem Objekt. Die Klasse kapselt ihre Eigenschaften (Daten) und ermöglicht nur über die Schnittstellen den Zugriff auf die Eigenschaften. Die Daten sollen vor direkter Manipulation geschützt werden, um eine Blackbox zu simulieren.

Ich sehe regelmäßig Java-Code, in dem die Blackbox-Regel gebrochen wird. Viele Programmierer meinen, wenn sie die Daten einer Klasse als Privat deklarieren, ist alles gut.

Weiterlesen