Enumerationen unter Java mit Eigenschaften ausstatten

Im Gegensatz zu vielen anderen Programmiersprachen sind Enumerationen unter Java ein wenig anders gestrickt. Wird eine Enumerationen dort kompiliert entsteht als Ergebnis eine Klasse. Dieser Umstand kann für interessante Dinge genutzt werden. Während in C# der Enum:

public enum Unit {
    PASCAL,
    PSI
}

eine reine Enumeration, mit zwei Werten, darstellt, kann die Enumeration unter Java mit zusätzlicher Funktionalität ausgestattet werden:

public enum Unit {

    PASCAL("Pascal", 1),
    PSI("Pound-force per square inch", 6.895);

    Unit(String name, double conversionFactor) {
        this.name = name;
        this.conversionFactor = conversionFactor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getConversionFactor() {
        return conversionFactor;
    }

    public void setConversionFactor(double conversionFactor) {
        this.conversionFactor = conversionFactor;
    }

    private String name;
    private double conversionFactor;
}

In diesem Fall erhält die Enumeration zwei zusätzliche Eigenschaften, einen Namen und einen Faktor zur Umrechnung in Pascal. Bei der Definition der einzelnen Werte der Enumeration werden diese zusätzlichen Eigenschaften über den Konstruktor übergeben. In der Nutzung sieht das Ganze dann wie folgt aus:

Unit unit = Unit.PSI;

System.out.println(unit.getName());
System.out.println("Conversion factor to Pascal: " + unit.getConversionFactor());

Mit dieser Herangehensweise lassen sich Enumerationen unter Java einfach mit dazugehörigen Metadaten bzw. zusätzlichen Informationen anreichern.

Schneller Webserver für zwischendurch

Unter Linux ist der einfache Webserver für den Bedarfsfall schnell gebaut. Wer so etwas auch für Windows benötigt, der sollte sich einmal HFS anschauen. Dabei handelt es sich um einen in Delphi geschriebenen Webserver.

Die HFS Oberfläche

Die HFS Oberfläche

In der Oberfläche kann man die entsprechenden Dateien zur Freigabe hinzufügen, so das diese anschließend per HTTP erreichbar sind. Daneben sind in der Oberfläche einige Optionen zur genaueren Konfiguration zu finden. Auch eine Shell-Integration ist möglich. Interessant ist die Lizenz welche HFS als freie Software ausweist:

HFS comes with ABSOLUTELY NO WARRANTY; for details click Menu -> Web links -> License This is FREE software, and you are welcome to redistribute it under certain conditions.

Allerdings stellt sich hier die Frage bis zu welchem Grad die “certain conditions” bei den bekannten freien Lizenzen gegeben sind. Bezogen werden kann HFS unter http://rejetto.com/hfs/.