Kategorie: Java

Schnelle Map/Set/List Initialisierung mit der “Double Brace Initialization”

24 Jan

Oft möchte man in Java eine HashMap anlegen und diese direkt auch mit Werten füllen. Mit normalen Methoden ist das so nicht möglich. Benötigt man die Map (Set, Liste, Array …) nur temporär muss man immer unschön mit add() neue Werte hinzufügen:

Set<String> validCodes = new HashSet<String>();
 
validCodes.add("aaa");
validCodes.add("bbb");
validCodes.add("ccc");
 
removeProductsWithCodeIn(validCodes);

Das erzeugt schlecht lesbaren Code und außerdem auch Overhead. Schöner wäre es, wenn man das Set gleich mit den Werten während der Initialisierung füllen könnte.

Das kann man seit Java 1.5 schon wie folgt erledigen, mit der “Double Brace Initialization”, also der Doppelklammer Initialisierung:

removeProductsWithCodeIn(new HashSet<String>() {{
	add("aaa");
	add("bbb");
	add("ccc");
}});

Dies erzeugt genau das gleiche Resultat wie oben, vermeidet aber unnötige Codezeilen.

Was genau passiert dort nun? Also die ersten {} erzeugen eine neue anonyme innere Klasse (AnonymousInnerClass), die zweiten {} innerhalb der jetzt erzeugten anonymen inneren Klasse erzeugen einen sogenannten “instance initializer block”, also einen Block, der beim instanziieren der Klasse initialisiert wird. Klingt kompliziert, heißt aber nur, das was dort steht wird dann ausgeführt. Da eine innere Klasse erzeugt wird, klappt dieses Vorgehen nur bei nicht finalen Klassen (non-final).

Diese Methode ist nicht auf Collections beschränkt, sie funktioniert auch mit Objekten:

add(new JPanel() {{
	setLayout(...);
	setBorder(...);
	add(new JLabel(...));
}});

Ein einziges Problem gibt es allerdings, eine equals() Methode die wie folgt implementiert ist, greift nicht mehr korrekt:

public boolean equals(final Object o) {
	if (o == null) {
		return false;
	} else if (!getClass().equals(o.getClass())) {
		return false;
	} else {
		Example other = (Example) o;
		// Compare this to other.
	}
}

Warum? Ganz einfach, die neue erzeugte anonyme innere Klasse ist ja eine neue Klasse und damit nicht mehr gleich zur alten äußeren Klassen. Hier muss man also etwas aufpassen!

(via)

 

Design Pattern by Gamma und Co.

18 Jan

Jeder gute Programmierer sollte die grundlegenen Design Pattern von Gamma und Co. kennen. Für eine kleine 2-seitige Übersicht ist jetzt mit den Design Pattern Cards gesorgt.

Solche Pattern (Muster) helfen Probleme schnell und sauber zu lösen. Man kann sich damit sicher sein, eine gute Lösung zu nutzen und greift auf die langjährige Erfahrung einer ganzen Community zurück. Also, jeder sollte 5-10 Pattern kennen und auch anwenden können, ihr haltet damit euren Code wesentlich sauberer und besser wartbar!

 

Die aktuell gefragtesten Programmiersprachen (TIOBE, September 2009)

06 Okt

Tiobe hat wie üblich im letzten Monat das aktuelle Ranking über diverse Programmiersprachen veröffentlicht.

“The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, Wikipedia and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.”

Es werden also diverse Daten aggregiert und dann aufbereitet, um daraus einen Index zu erstellen. Mit Java und C ist man wie immer sehr gut aufgestellt. Mehr Daten gibt es auf der Tiobe Webseite.

index

tpci_trends

 

Quick-Diff Online-Tool

28 Sep

Manchmal muss man auf die schnelle 2 Strings (Zeichenketten) miteinander vergleichen, hat dafür aber gerade kein Tool parat.

Dafür gibt es das Online-Tool: Quick-Diff. Wie der Name schon sagt kann man damit flott 2 Zeichenketten vergleichen, die Unterschiede werden hervorgehoben, zuvor kann man noch ein paar wenige Einstellungen vornehmen. Das Tool tut aber was es soll und das in einer guten Art und Weise, mir hat es heute sehr geholfen :).

diff

 

Prinzipien, Regeln und Praktiken für bessere Software

08 Sep

bannerDomain

Auf Clean Code Developer (CCD) geht es um Tipps, Regeln und Best Practices für sauberen und gut strukturierten Code. Egal in welcher objektorientierten Programmiersprache (und auch teilweise in anderen Sprachen), diese Webseite bietet einem einen Leitfaden seinen Programmierstil zu verbessern. Denn jeder ernsthafte Programmierer sollte diese Regeln teilweise oder ganz beherrschen und auch anwenden, meiner Meinung nach. Es macht den Source-Code besser lesbar und hilft Fehler zu vermeiden.

Die Einteilung in 7 CCD Grade hilft dabei:

  1. Schwarz
  2. Rot
  3. Orange
  4. Gelb
  5. Grün
  6. Blau
  7. Weiß

In den einzelnen Graden werden verschiedene Paradigma erklärt und anhand von Beispielen näher erläutert.

Einige Themen befassen sich zum Beispiel mit:

  • One Level of Abstraction
  • Single Responsibility Principle
  • Separation of Concerns
  • Interface Segregation Principle
  • Dependency Inversion Principle
  • Liskov Substitution Principle
  • Principle of Least Astonishment
  • Information Hiding Principle

Selber beschreiben sie sich so:

Softwareentwicklung braucht Profis. Was aber sind Profis? Menschen die mit der Softwareentwicklung Geld verdienen? Nein, das CcdTeam meint, es gehört mehr und anderes dazu.

Professionalität in der Softwareentwicklung hat nichts mit Geld zu tun. Sie hat auch nur bedingt mit einem bestimmten Ausbildungsweg zu tun. Wir kennen professionelle Softwareentwickler, die wenig oder gar kein Geld mit ihrer Software verdienen und wir kennen professionelle Softwareentwickler, die weder Diplom noch Doktortitel haben.