Seite 1 von 1

Der Java - Hass - Thread

Verfasst: Mo Jan 18, 2010 12:32 am
von Kerli
Ich bin gerade dabei für die Uni etwas mit Java zu entwickeln, und mir kommt es so vor als ob Java überhaupt noch nie etwas von kompilieren und Laufzeitersparnis gehört hat. Es wird beim "kompilieren" oder wie auch immer das bei Java heißt nicht einmal überprüft ob aufgerufenen Methoden auch tatsächlich existieren, egal ob es sich dabei um Konstruktoren oder dem Templates in gewisserweise sehr ähnlichen Generics handelt. Die IDE und der "Kompiler" melden keine Fehler und dann zur Laufzeit kommt eine tolle NoSuchMethodError-Exception. Bei einer Funktion die man oft verwendet wird man das ja wohl recht schnell bemerken, ich möchte jedoch nicht wissen wie das ist wenn eine gewisse Methode nur ganz selten aufgerufen wird; Sicherlich ein Debugalbtraum.

Und wenn wir schon bei den Generics sind. Irgendwie habe ich bis jetzt noch keine Möglichkeit gefunden eine Spezialisierung für einen bestimmten Templateparameter zu schreiben. Irgendwie scheint es so als ob Generics nur für Container vom Typ T gedacht sind.

Also mit Java hat man es nicht einfach, man kommt sich vor als hätte man eine Zwangsjacke an und muss C++-Programmierer um Ihre Freiheit beneiden.

So jetzt habe ich meinen Frust etwas abgelassen und kann wieder weiter pfuschen gehen :D

Re: Der Java - Hass - Thread

Verfasst: Mo Jan 18, 2010 12:43 am
von Xin
Kerli hat geschrieben:Ich bin gerade dabei für die Uni etwas mit Java zu entwickeln, und mir kommt es so vor als ob Java überhaupt noch nie etwas von kompilieren und Laufzeitersparnis gehört hat.
Das ist nicht wirklich erforderlich, denn es folgt noch ein zweiter Compilerlauf, der das eher berücksichtigen kann. Ansonsten sind Java-Programme ein lockerer Verbund von Klassen.
Kerli hat geschrieben:Es wird beim "kompilieren" oder wie auch immer das bei Java heißt nicht einmal überprüft ob aufgerufenen Methoden auch tatsächlich existieren, egal ob es sich dabei um Konstruktoren oder dem Templates in gewisserweise sehr ähnlichen Generics handelt.
Konstruktoren müssen ja nicht zwangsweise existieren.
Templates und Generics sind nicht ähnlich! Die Möglichkeiten, die Generics bieten, kann man mit Templates nicht abbilden, aber nachbilden. Umgekehrt geht das nicht.
Kerli hat geschrieben:Die IDE und der "Kompiler" melden keine Fehler und dann zur Laufzeit kommt eine tolle NoSuchMethodError-Exception. Bei einer Funktion die man oft verwendet wird man das ja wohl recht schnell bemerken, ich möchte jedoch nicht wissen wie das ist wenn eine gewisse Methode nur ganz selten aufgerufen wird; Sicherlich ein Debugalbtraum.
Nein, von Java gewünschtes Verhalten. 2000 oder 2001 bewarb Sun auf ihrer Website die These, dass Exceptions besser als Compilerfehler sind. Das haben die aber wohl inzwischen aufgegeben.
Kerli hat geschrieben:Und wenn wir schon bei den Generics sind. Irgendwie habe ich bis jetzt noch keine Möglichkeit gefunden eine Spezialisierung für einen bestimmten Templateparameter zu schreiben. Irgendwie scheint es so als ob Generics nur für Container vom Typ T gedacht sind.
So ist es. Es widerspricht dem Konzept von Generics, dass es Spezialisierungen gibt, da ein Generic generischer Code für alle Klassen gilt, ein Template aber ein Muster ist, wie eine Klasse erzeugt wird. Erzeugst Du mit einem Template eine bestimmte Klasse, kannst Du so Spezialisierungen unterbringen, weil dann auch ein anderer Code erzeugt wird. Bei einem Generic wird aber grundsätzlich der gleiche Code verwendet.
Dieses Feature beherrscht C++ nicht.
Kerli hat geschrieben:Also mit Java hat man es nicht einfach, man kommt sich vor als hätte man eine Zwangsjacke an und muss C++-Programmierer um Ihre Freiheit beneiden.
Spassiger wird es, wenn Du Mehrfachvererbung oder Const-Correctness benutzen willst ^^