Jan 29 2009

Java ist komisch

Nachdem wir heute am TGM eine kleine Diskussion hatten, wobei der Christoph behauptet hat, dass man in Java zu einem char kein int addieren kann, und ich das einfach nicht glauben konnte, musste ich das gleich mal probieren. Und er hatte fast recht. Beim ersten Versuch gelang es mir nicht, den Fehler zu erzeugen, aber ich habe es dann doch geschafft:

Wenn man (also typischer Java-Programmierer, also nicht schreibfaul) programmiert ist das eigentlich einfach zu erreichen. Der folgende Code liefert beim Kompilieren eine entsprechende Fehlermeldung (possible loss of precision - was ja durchaus nicht falsch ist, wobei das eigentlich nur eine Warnung sein sollte, und kein Fehler, aber da ist Java ja sowieso ein bisschen komisch):

1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main( String args [] ) {
        char zeichen = 'a';
        int x = 5;

        zeichen = zeichen + x;

        System.out.println( zeichen );
    }
}

Wobei die vom C-Programmierer favorisierte kurze Schreibweise (die auch mein erster Versuch war) problemlos funktioniert und beim Ausführen auch das erwartete Ergebnis zurückliefert:

1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main( String args [] ) {
        char zeichen = 'a';
        int x = 5;

        zeichen += x;

        System.out.println( zeichen );
    }
}

Eine alternative funktionierende Lösung wäre ein entsprechendes Casten:

1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main( String args [] ) {
        char zeichen = 'a';
        int x = 5;

        zeichen = (char)(zeichen + x);

        System.out.println( zeichen );
    }
}

Abschließend kann man sagen, dass sich Java da zwar schon ein bisschen seltsam verhält (es bringt zum Beispiel auch nichts nur das x auf char zu casten, man muss das Ergebnis der Addition casten. Aber zumindest funktioniert eine Addition sehr wohl, wobei die Nichtfunktionalität ja eh niemand so wirklich glauben wollte…


Jan 16 2009

Java 5 & enums

Christoph hat mir letztens einen Link geschickt: No, silly! It’s an enum! Ich habe mich dabei beim Lesen königlich amüsiert, das könnte durchaus die reale Entstehungsgeschichte der Java-Enums sein. Kurz zusammengefasst:

JLD#3: So an enum is… a non-instantiable, memberless, final class with subclasses, members and instances?
JLD#2: Yes!
JLD#1: Precisely!
JLD#3: But that’s just a plain old class!
JLD#1: No, silly! It’s an enum!

Java ist zum Teil schon sehr bescheuert…