{"id":79,"date":"2007-05-20T12:51:00","date_gmt":"2007-05-20T12:51:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=79"},"modified":"2007-05-20T12:51:00","modified_gmt":"2007-05-20T12:51:00","slug":"erste-implementierung-fur-jsr-308","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2007\/05\/erste-implementierung-fur-jsr-308\/","title":{"rendered":"Erste Implementierung f\u00fcr JSR 308"},"content":{"rendered":"<p>Die <a href=\"http:\/\/pag.csail.mit.edu\/jsr308\/\">JSR 308<\/a>&nbsp;(Annotations on Java Types) hat unter anderem das Ziel, Annotationen an weiteren Dingen festzumachen:<\/p>\n<ul>\n<li>for generic type arguments to parameterized classes:\n<pre>    Map&lt;@NonNull String, @NonEmpty List&lt;@Readonly Document&gt;&gt; files;<br \/><\/pre>\n<p><\/p>\n<li>for generic type arguments in a generic method or constructor invocation:\n<pre>    o.&lt;@NonNull String&gt;m(\"...\");<br \/><\/pre>\n<p><\/p>\n<li>for type parameter bounds and wildcards:\n<pre>    class Folder&lt;F extends @Existing File&gt; { ... }<br \/>    Collection&lt;? super @Existing File&gt;<br \/><\/pre>\n<p><\/p>\n<li>for class inheritance:\n<pre>    class UnmodifiableList&lt;T&gt; implements @Readonly List&lt;@Readonly T&gt; { ... }<br \/><\/pre>\n<p><\/p>\n<li>for <tt>throws<\/tt> clauses:\n<pre>    void monitorTemperature() throws @Critical TemperatureException { ... }<br \/><\/pre>\n<p><\/p>\n<li>for typecasts:\n<pre>    myString = (@NonNull String) myObject;<br \/><\/pre>\n<p><\/p>\n<li>for type tests:\n<pre>    boolean isNonNull = myString instanceof @NonNull String;<br \/><\/pre>\n<p><\/p>\n<li>for object creation:\n<pre>    new @NonEmpty @Readonly List&lt;String&gt;(myNonEmptyStringSet)<br \/><\/pre>\n<p><\/p>\n<p>For generic constructors (JLS section 8.8.4), the annotation follows the explicit type arguments (JLS section 15.9): <\/p>\n<pre>    new &lt;String&gt; @Interned MyObject()<br \/><\/pre>\n<p><\/p>\n<li>for method receivers:\n<pre>    public int size() @Readonly { ... }<br \/><\/pre>\n<p><\/p>\n<li>for class literals:\n<pre>    Class&lt;@NonNull String&gt; c = @NonNull String.class;<br \/><\/pre>\n<p><\/p>\n<li>for arrays:\n<pre>    Document[@Readonly][] docs4 = new Document[@Readonly 2][12];<br \/>    Document[][@Readonly] docs5 = new Document[2][@Readonly 12];<br \/><\/pre>\n<p><\/p>\n<p>This syntax permits independent annotations for each distinct level of array, and for the elements; see Section&nbsp;<a href=\"http:\/\/pag.csail.mit.edu\/jsr308\/java-annotation-design.html#sec:array-syntax\">3.4<\/a> for alternative syntaxes.<\/p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Die Beispiele stammen aus dem <a href=\"http:\/\/pag.csail.mit.edu\/jsr308\/java-annotation-design.html\">working document<\/a> von Michael D. Ernst. Auf seiner <a href=\"http:\/\/pag.csail.mit.edu\/jsr308\/\">Homepage<\/a> l\u00e4sst sich die Compilererweiterung herunterladen und alles \u00fcber die JSR 308 nachlesen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die JSR 308&nbsp;(Annotations on Java Types) hat unter anderem das Ziel, Annotationen an weiteren Dingen festzumachen: for generic type arguments to parameterized classes: Map&lt;@NonNull String, @NonEmpty List&lt;@Readonly Document&gt;&gt; files; for generic type arguments in a generic method or constructor invocation: o.&lt;@NonNull String&gt;m(&#8222;&#8230;&#8220;); for type parameter bounds and wildcards: class Folder&lt;F extends @Existing File&gt; { &#8230; [&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-79","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\/79","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=79"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/79\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}