{"id":2709,"date":"2014-03-09T17:29:20","date_gmt":"2014-03-09T15:29:20","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2709"},"modified":"2014-03-23T12:25:09","modified_gmt":"2014-03-23T10:25:09","slug":"java-does-not-suck-aber","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2014\/03\/java-does-not-suck-aber\/","title":{"rendered":"Java does not suck, ABER &hellip;"},"content":{"rendered":"<p>Java l\u00f6st bei eigenen Menschen tiefere Aggressionen aus, die dann nur mit 5 Stunden Katzenvideos zu bes\u00e4nftigen sind. In den Tenor will ich nicht einsteigen, da ich Java an sich geil finde und die meisten Kritiken <em>nicht<\/em> teile: langsam, nicht wirklich plattformunabh\u00e4ngig, GC kommt zur Unzeit, gepr\u00fcfte\/ungepr\u00fcfte Ausnahmen, kein private protected, kein Sprachkonstrukt f\u00fcr Properties, keine \u00fcberladene Operatoren, nicht dynamisch genug, Swing ist langsam, kein Modulsystem, Sicherheitsprobleme, \u2026<\/p>\n<p>Daf\u00fcr sind es andere (kleinere) Dinge, die mich nerven:<\/p>\n<ul>\n<li>Der Java-Bibliothek merkt man <strong>das Alter <\/strong>an. Vieles ist damals einfach in den \u201cContainer\u201d java.util gewandert, und was warum gibt es eigentlich System und Runtime? Von Markierungsschnittstellen Serializable und RandomAccess kommen wir auch nicht mehr weg, der Vorteil ist aber, dass ein instanceof-Test billig ist. Collections ist ein Sammelsurium von Methoden rund um Collection-Typen. Warum wurden die Methoden nicht auch bei den Collection\/List-Objekten festgemacht? Ein List#sort(\u2026) wurde ja mittlerweile nachgereicht.<\/li>\n<li>Wir haben f\u00fcr die gleiche Aufgabe gleich <strong>mehrere Bibliotheken <\/strong>in der der Java SE. Es gibt drei Gui-Komponentenbibliotheken (AWT, Swing, JavaFX), zwei Datei-APIs (java.io.File und java.nio mit Files, Path, Paths, \u2026), zwei Datum-Zeit-APIs (Date\/Calendar und java.time in Java 8).\u00a0 Neueinsteiger in Projekten werden bei Datum\/Zeit vermutliche eine wilde Mischung aus Date\/Calendar, Joda-Time und bald Java 8 Date-Time-API finden.<\/li>\n<li>Immer <strong>mehrere Logging-Frameworks <\/strong>im Projekt und folglich unterschiedliche Konfigurationen. Als es java.util.logging (JUL) noch nicht gab, war log4j quasi Standard. Dann kam JUL, log4j wolle man vereinigen, also kam Meta-Logging wie Commons Logging, sp\u00e4ter SL4J. Dann wurde es ruhig um log4j, neue Produkte kamen, wie logback. Jetzt startet Log4j 2 wieder durch \u2026<\/li>\n<li>Die Unterscheidung zwischen <strong>primitiven Datentypen und Wrapper-Typen<\/strong> wird immer irrer, schaut man auf Java 8 in das java.util.function-Paket: BooleanSupplier, DoubleBinaryOperator, DoubleConsumer, DoubleFunction&lt;R&gt;, DoublePredicate, DoubleSupplier, DoubleToIntFunction, DoubleToLongFunction, DoubleUnaryOperator, IntBinaryOperator, IntConsumer, IntFunction&lt;R&gt;, IntPredicate, IntSupplier, IntToDoubleFunction, IntToLongFunction, IntUnaryOperator, LongBinaryOperator, LongConsumer, LongFunction&lt;R&gt;, LongPredicate, LongSupplier, LongToDoubleFunction, LongToIntFunction, LongUnaryOperator, ObjDoubleConsumer&lt;T&gt;, ObjIntConsumer&lt;T&gt;, ObjLongConsumer&lt;T&gt;, ToDoubleBiFunction&lt;T,U&gt;, ToDoubleFunction&lt;T&gt;, ToIntBiFunction&lt;T,U&gt;, ToIntFunction&lt;T&gt;, ToLongBiFunction&lt;T,U&gt; , ToLongFunction&lt;T&gt; (OMG!) \u00c4hnliches in javafx.beans.property auch noch mal.<\/li>\n<li><strong>Oracle-Webseiten verschwinden<\/strong>, Sun-Seiten wurden nicht \u00fcbertragen.\u00a0 F\u00fcr die kommende Version vom Buch muss ich zwangsl\u00e4ufig alle Links pr\u00fcfen, viele leiten auf \u00fcbergeordnete Seiten weiter und sind verschwunden. Bei einer Seite wie <a title=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/tools\/\" href=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/tools\/\">http:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/tools\/<\/a> erwartet man, dass man 7 durch 8 ersetzen kann und dann kommt man irgendwie bei der Doku von Java 8 aus, oder? Ist aber nicht so \u2026<\/li>\n<li>Bug-Base-IDs und Links stimmen oft nicht, Bug gibt es angeblich nicht.<\/li>\n<li>toString()-Methoden sind i.d.R. Debug-Methoden, warum implementiert ein <strong>Array \u2013Objekt kein vern\u00fcnftiges toString()<\/strong>?<\/li>\n<li><strong>GlassFish ist nicht mehr kommerziell supported <\/strong>wobei es die RI ist. Wie soll man Kunden dann f\u00fcr so ein tolles Produkt begeistern k\u00f6nnen?<\/li>\n<li>Kein standardisiertes Web-Framework bis aus JSF, das reicht nicht. In der Microsoft-Welt hat man erkannt, dass man auch ein (anderes) MVC-Framework braucht, dort gib es ASP.NET MVC Framework und das klassische ASP.<\/li>\n<li><strong>Zwei Compiler<\/strong>; der Standard-Compiler und der Eclipse-Compiler (EJC) sind auf unterschiedlichem Niveau und gibt es neue Java-Version, bauen die Eclipse-Macher alles nach. Das dauert und die Compiler sind nicht identisch. Compiler werden immer komplexer.<\/li>\n<li>Unklare <strong>Zukunft von NetBeans<\/strong>. Bei NB gibt es nach der kommenden Version NB 8.0 <a href=\"https:\/\/netbeans.org\/community\/releases\/roadmap.html\">(erwartet April 2014) \u00fcberhaupt keine Zukunftsaussagen<\/a>. Viele Entwickler sind aus NB abgezogen worden, ob es \u00fcberhaupt weiter geht und in welchem Tempo ist offen.<\/li>\n<li>Unklare Aussage \u00fcber die <strong>Zukunft von Bibliotheken<\/strong>. Wie wird sich GWT weiter entwickeln? Was ist mit anderen Projekten? Oftmals wird das Intervall von Code-\u00c4nderungen immer gr\u00f6\u00dfer, die Projektseite erf\u00e4hrt keine Updates und das Projekt schl\u00e4ft ein. Wie viele UML-Tools sind schon gekommen und gegangen?<\/li>\n<li>Oracle hat in <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/7u51-relnotes-2085002.html\">Java 7-Updates 51<\/a> die <strong>Sicherheitsrichtlinien f\u00fcr belegbare Ports versch\u00e4rft<\/strong>, mit der Konsequenz dass pl\u00f6tzlich Derby nicht mehr l\u00e4uft und somit alle Standard-Tutorials f\u00fcr JDBC\/JPA schon am Anfang eine H\u00fcrde nehmen m\u00fcssen: \u201cThe default socket permissions assigned to all code including untrusted code have been changed in this release. Previously, all code was able to bind any socket type to any port number greater than or equal to 1024. It is still possible to bind sockets to the ephemeral port range on each system. The exact range of ephemeral ports varies from one operating system to another, but it is typically in the high range (such as from 49152 to 65535). The new restriction is that binding sockets outside of the ephemeral range now requires an explicit permission in the system security policy..\u201d<\/li>\n<li><strong>Suche in Javadoc <\/strong>ist immer noch nicht m\u00f6glich, ein wenig JavaScript k\u00f6nnte nicht schaden.<\/li>\n<\/ul>\n<p>Was nervt euch?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java l\u00f6st bei eigenen Menschen tiefere Aggressionen aus, die dann nur mit 5 Stunden Katzenvideos zu bes\u00e4nftigen sind. In den Tenor will ich nicht einsteigen, da ich Java an sich geil finde und die meisten Kritiken nicht teile: langsam, nicht wirklich plattformunabh\u00e4ngig, GC kommt zur Unzeit, gepr\u00fcfte\/ungepr\u00fcfte Ausnahmen, kein private protected, kein Sprachkonstrukt f\u00fcr Properties, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2709","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2709"}],"version-history":[{"count":4,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2709\/revisions"}],"predecessor-version":[{"id":2751,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2709\/revisions\/2751"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}