Der Java - Hass - Thread

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
Antworten
Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Der Java - Hass - Thread

Beitrag von Kerli » Mo Jan 18, 2010 12:32 am

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
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Der Java - Hass - Thread

Beitrag von Xin » Mo Jan 18, 2010 12:43 am

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 ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten