Java Müll, Abfall, Kehricht oder Mist

Halte die Quelldateien sauber und frei von Müll, der da wäre …

  • Default-Konstruktor ohne Implementierung
  • Nicht benötigte Variablen
  • Nicht aufgerufene Funktionen
  • Kommentare die keine Informationen hinzufügen

Kennst Du noch weiteren trash?

IPhone

Cool, jetzt kann ich auch übers IPhone von überall posten 🙂 Und bearbeiten geht auch 😉 Und noch ein paar Plugins ergänzt ua. den Tweet Button.

Redundanter Kontext in Klassen

Es ist keine Gute Idee, wenn eine Anwendung z.B. „Welt Timer“ heißt,
jede Klasse mit dem Präfix „WT“ zu beginnen.
-In der IDE würde dann, wenn man „W“ und „Completion Key“ eintippt, eine lange Liste aller Namen erscheinen.
-Es währen immer 2 Zeichen redundanter und irrelevanter Code.
-Klassen sollen möglichst kurz sein, solange sie klar sind.

Wieviele Argumente sollte eine Methode haben?

Ideal ldt. Robert C. Martin (Clean Code, 2009) „ist null (niladisch).

Als nächstes kommt eins (monadisch), dicht gefolgt von zwei (dyadisch).

Drei Argumente (triadisch), sollte wenn möglich, vermieden werden.

Mehr als drei (polyadisch) erfordert eine sehr spezielle Begründung – und sollte dann trotzdem nicht benutzt werden.“

Das sehe ich auch so.

Und Ihr?

Threads mit asynchron Rückgabe über Callable

Um einen neuen Thread zu starten der ein Ergebniss asynchron liefert, gibt es seit Java 1.5 die Schnittstelle Callable.

Was muss getan werden?

-Die Klasse mit dem Ergebniss muss Callableimplementieren und V call() throws Exception überschreiben.

-Evl. im Konstruktor der Ergebniss Klasse Parameter mitgeben.

-Dann den Excecutor anlegen ExecutorService executor = Executors.newCachedThreadPool();

-Einen neuen Überwachungs Thread starten mit Future erg = executor.submit(ergebnisKlasse).
Würde man Future erg = executor.submit(u).get() verwenden würde eine synchrone abarbeitung des Threads erfolgen. Das heißt es würde die weitere Bearbeitung solange geblockt, bis der Thread fertig ist.

-Mit erg.get(1, TimeUnit.SECONDS) wird das Ergebnis des Threads geliefert oder aber wenn die angegebenen Zeit abgelaufen ist wird
eine TimeoutException geworfen.

-Mit erg.isDone() kann abgefragt werden ob der Thread fertig ist oder nicht

Wie sieht eine gute API aus?

Gem. Joshua Bloch „If in doubt, leave it out!“.

Das heißt soviel wie, nur Methoden in eine API aufnehmen, von denen man sicher ist, dass sie auch benötigt werden. Methoden für die man kein verwender hat, sollte man nicht mit aufnehmen. Den Neues kann man leicht
hinzufügen, Bestehendes aber nicht so leicht verändert oder entfernen. Also sich auf das konzentrieren, was
in den Anforderungen gebraucht wird. Sonst wird das System unnötig komplex.

Siehe diesen Video bei ca. 24 min.

Generische Methoden

Das einzig seltsame an generischen Methoden ist, das die Type Variable (hier T) vor dem return Typ der Methode deklariert werden muss.

Hier ein Beispiel mit der getKlassenname Methode, die für alle Objekte den Klassennamen als String zurück gibt.

public class GenericMethods {

public static < T > String getKlassenname(T t) {

return t.getClass().getName();
}

public static void main(String[] args) {

System.out.println(GenericMethods.getKlassenname(new Integer(1)));

System.out.println(GenericMethods.getKlassenname("String"));

System.out.println(GenericMethods.getKlassenname(new ArrayList()));
}
}


Wie sieht das Ergebnis aus? „Generische Methoden“ weiterlesen

Java Quiz

Heute mal ein kleines Java Quiz. Schaut Euch mal diese AussenKlasse an, die eine innere Klasse (Innen) in einer Methode definiert hat:


public class AussenKlasse {

private final String aussenVar = "aussenVar";

public void aussenMethode() {

final String innenMethodeVar = "innenMethodeVar";

class Innen {
private final String innenVar = "innenVar";

public Innen() {
printInnen();
}

public void printInnen() {
System.out.println("aussenVar=" + aussenVar);
System.out.println("innenMethodeVar=" + innenMethodeVar);
System.out.println("innenVar=" + innenVar);
}
}
new Innen();
}

public static void main(String[] args) {
AussenKlasse a = new AussenKlasse();
a.aussenMethode();
}

}

Was ist richtig?

1. Die Klasse läßt sich nicht compilieren, da Klassen nicht in Methoden definiert werden dürfen.

2. Es gibt eine ClassCastException.

3. Es wird die printInnnen Methode ausgeführt.

4. Es wird folgendes auf System.out ausgegeben:
aussenVar=aussenVar
innenMethodeVar=innenMethodeVar
innenVar=innenVar

5. Es wird folgendes auf System.out ausgegeben:
aussenVar=
innenMethodeVar=innenMethodeVar
innenVar=innenVar

6. Es gibt eine NullPointerException

Lösung: „Java Quiz“ weiterlesen

Lesen, lesen, lesen

Wieviel soll ein Software-Entwickler lesen?

„Wir schlagen daher vor, pro Jahr wenigstens 6 Fachbücher zu lesen. Ferner sollten Periodika regelmäßig gelesen werden und darunter verstehen wir neben Fachzeitschriften auch Blogs.“

Quelle: www.clean-code-developer.de