{"id":1085,"date":"2011-08-19T19:34:30","date_gmt":"2011-08-19T17:34:30","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/08\/ct-atikel-ber-java-7-was-lange-whrt-eine-kurz-nachkritik\/"},"modified":"2011-08-20T10:32:08","modified_gmt":"2011-08-20T08:32:08","slug":"ct-atikel-ber-java-7-was-lange-whrt-eine-kurz-nachkritik","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/08\/ct-atikel-ber-java-7-was-lange-whrt-eine-kurz-nachkritik\/","title":{"rendered":"c&rsquo;t Artikel &uuml;ber Java 7: &ldquo;Was lange w&auml;hrt &hellip;&rdquo; &ndash; eine kurze Nachkritik"},"content":{"rendered":"<p>In der c\u2019t hat Michael Tamm in der Ausgabe 17 (August) einen Beitrag \u00fcber Java 7 geschrieben. Der ist ganz gut gelungen und gibt einen netten Einblick in die Neuerungen von Java 7 (pr\u00e4zisiertes rethrow hat er irgendwie verschwiegen, wei\u00df nicht warum).<\/p>\n<p>Ein paar Kleinigkeiten kann man noch anf\u00fcgen:<\/p>\n<ul>\n<li>Bei switch mit Strings: \u201cF\u00fcr jeden case-Zweig wird die in der switch-Anweisung aufgef\u00fchrte String-Variable mit Hilfe ihrer Methode equals() mit der Konstanten hinter case verglichen\u201d. Hier k\u00f6nnte man meinen, dass eine switch-Anweisung zu einer if-else-Kaskade mit einer linearen Laufzeit f\u00fchrt. Das stimmt aber nicht. equals() kommt erst relativ sp\u00e4t dazu. Erst gibt es einen switch auf dem Hashwert, wenn der passt, kommt equals(), um mit Hashwert-Kollisionen umzugehen.<\/li>\n<li>\u201c\u2026 dass man beim Anlegen von Objekten mit generischen Parametern diese auf der rechten Seiten der Zuweisung nicht mehr wiederholen muss\u2026\u201d. Das k\u00f6nnte man so lesen, dass &lt;&gt; ausschlie\u00dflich bei Zuweisungen oder Initialisierungen g\u00fcltig ist. Doch &lt;&gt; ist flexibler; es kann durchaus <strong>return new ArrayList&lt;&gt;();<\/strong> hei\u00dfen. (Dass der Begriff \u201cgenerischer Parameter\u201d unsauber ist, ist eine andere Sache \u2026 )<\/li>\n<li>Die Einleitung vom multi-catch beginnt mit \u201c\u2026 Seit Java 1.0 gibt es gepr\u00fcfte (checked exceptions), die immer behandelt oder in der Methodensignatur aufgef\u00fchrt werden m\u00fcssen, sowie die ungepr\u00fcfte Ausnahmen [\u2026].\u201c Ob multi-catch nun checked oder unchecked Exception f\u00e4ngt ist egal, daher ist die Information an diese Stelle eigentlich \u00fcberfl\u00fcssig.<\/li>\n<li>Beim Thema try-mit-Ressourcen \u201cDie VM schlie\u00dft alle hinter dem try in runden Klammern aufgef\u00fchrten Ressourcen[\u2026]\u201d. Irgendwie macht alles schon die JVM, aber man k\u00f6nnte den Eindruck bekommen, hier ist Magie im Spiel. Das stimmt aber nicht, denn der Compiler erzeugt nur etwas, was wir h\u00e4tten auch schreiben k\u00f6nnen, nur haben wir mit dem neuen try weniger Schreibarbeit. Die JVM wei\u00df nicht, ob der tolle Schlie\u00df-Code von uns kommt oder nicht.<\/li>\n<li>\u201cDas Pendant zur alten Klasse File ist die neue Klasse Path\u201d. Pendant? Klingt, als ob die gleich sind, ist aber absolut nicht so. Wenn das ein Pendant, also eine Kopie w\u00e4re, warum dann NIO.2?<\/li>\n<\/ul>\n<p>Die beschriebenen Dinge sind nur missverst\u00e4ndlich, aber leider gibt es auch zwei dickere Falschaussagen:<\/p>\n<ul>\n<li>\u201cMit den in Java 7 eingef\u00fchrten Typannotationen lassen sich nun auch Typen n\u00e4her beschreiben\u201d. Es folgt das Beispiel \u201c@NonNull Set&lt;@NonNull Edges&gt; edges;\u201d und er verweist auf den Link von JSR-308 (<a href=\"http:\/\/types.cs.washington.edu\/jsr308\/\">http:\/\/types.cs.washington.edu\/jsr308\/<\/a>). W\u00e4re nett, ist aber Bl\u00f6dsinn! Es gibt in Java 7 keine \u00c4nderung. Das verlinkten Dokument sagt: \u201cType annotations are <strong>planned <\/strong>to be part of the Java language and are supported by Oracle&#8217;s OpenJDK (for JDK 7, as of build M4).\u201d Das JST-308 nicht von Java 7 ist hatte ich auch schon vor einem halben Jahr geschrieben: <a href=\"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/java-se-7-developer-preview-release-verfgbar\/\">http:\/\/www.tutego.de\/blog\/javainsel\/2011\/02\/java-se-7-developer-preview-release-verfgbar\/<\/a>, aber ich erwarte nicht, dass Herr Tamm mein Blog liest.<\/li>\n<li>\u201c[\u2026] Nimbus Look &amp; Feel [\u2026] ist standardm\u00e4\u00dfig aktiv\u201d. H\u00e4tte Michael nur ein Swing-Programm gestartet, w\u00e4re ihm aufgefallen, das immer noch Metal aktiv ist und nicht Nimbus. (Grund: Inkompatibilit\u00e4ten <a href=\"http:\/\/blogs.oracle.com\/henrik\/entry\/nimbus_look-and-feel_in_jdk_7\">http:\/\/blogs.oracle.com\/henrik\/entry\/nimbus_look-and-feel_in_jdk_7<\/a>). Das SwingSet Demo w\u00e4hlt nur automatisch Nimbus aus.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In der c\u2019t hat Michael Tamm in der Ausgabe 17 (August) einen Beitrag \u00fcber Java 7 geschrieben. Der ist ganz gut gelungen und gibt einen netten Einblick in die Neuerungen von Java 7 (pr\u00e4zisiertes rethrow hat er irgendwie verschwiegen, wei\u00df nicht warum). Ein paar Kleinigkeiten kann man noch anf\u00fcgen: Bei switch mit Strings: \u201cF\u00fcr jeden [&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":[5],"tags":[],"class_list":["post-1085","post","type-post","status-publish","format-standard","hentry","category-java-7"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1085","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=1085"}],"version-history":[{"count":3,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1085\/revisions"}],"predecessor-version":[{"id":1089,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1085\/revisions\/1089"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}