{"id":255,"date":"2007-11-16T16:39:16","date_gmt":"2007-11-16T21:39:16","guid":{"rendered":"http:\/\/www.khaitan.org\/blog\/archives\/188"},"modified":"2007-11-16T16:39:16","modified_gmt":"2007-11-16T21:39:16","slug":"java-generics-taking-the-fun-away-from-writing-code-in-java","status":"publish","type":"post","link":"https:\/\/www.khaitan.org\/blog\/2007\/11\/java-generics-taking-the-fun-away-from-writing-code-in-java\/","title":{"rendered":"Java Generics: Taking the fun away from writing code in Java"},"content":{"rendered":"<p>Coding in Java was simple until Java 5 (or Java 1.5 &#8212; 1.5 is the developer version and Java 5 is the marketing version as Sun <a href=\"http:\/\/java.sun.com\/j2se\/1.5.0\/docs\/relnotes\/version-5.0.html\">calls<\/a> it!).  Learning <a href=\"http:\/\/java.sun.com\/j2se\/1.5.0\/docs\/guide\/language\/generics.html\">generics<\/a> in Java 1.5 is like learning Microsoft COM programming, it would take at least 5 passes to absorb it right.<\/p>\n<p>Look at this simple call, before generics<\/p>\n<pre>\n<a name=\"line1\">1<\/a> <font color=\"#2040a0\">List<\/font> <font color=\"#2040a0\">myIntList<\/font> <font color=\"4444FF\">=<\/font> <strong>new<\/strong> <font color=\"#2040a0\">LinkedList<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<a name=\"line2\">2<\/a> <font color=\"#2040a0\">myIntList<\/font>.<font color=\"#2040a0\">add<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><strong>new<\/strong> <font color=\"#2040a0\">Integer<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#FF0000\">0<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<a name=\"line3\">3<\/a> <font color=\"#2040a0\">Integer<\/font> <font color=\"#2040a0\">x<\/font> <font color=\"4444FF\">=<\/font> <font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#2040a0\">Integer<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font> <font color=\"#2040a0\">myIntList<\/font>.<font color=\"#2040a0\">iterator<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font>.<font color=\"#2040a0\">next<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<\/pre>\n<p>How about now:<\/p>\n<pre>\n<a name=\"line1\">1<\/a> <font color=\"#2040a0\">List<\/font><font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">Integer<\/font><font color=\"4444FF\">&gt;<\/font> <font color=\"#2040a0\">myIntList<\/font> <font color=\"4444FF\">=<\/font> <strong>new<\/strong> <font color=\"#2040a0\">LinkedList<\/font><font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">Integer<\/font><font color=\"4444FF\">&gt;<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<a name=\"line2\">2<\/a> <font color=\"#2040a0\">myIntList<\/font>.<font color=\"#2040a0\">add<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><strong>new<\/strong> <font color=\"#2040a0\">Integer<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#FF0000\">0<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<a name=\"line3\">3<\/a> <font color=\"#2040a0\">Integer<\/font> <font color=\"#2040a0\">x<\/font> <font color=\"4444FF\">=<\/font> <font color=\"#2040a0\">myIntList<\/font>.<font color=\"#2040a0\">iterator<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font>.<font color=\"#2040a0\">next<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font> <font color=\"#444444\"><\/font>\n<\/pre>\n<p>Here is the source snippet of java.util.Collection class from the 1.5 version. Makes me wipe the sweat.<\/p>\n<pre>\n<a name=\"line1\">1<\/a> <strong>public<\/strong> <strong>interface<\/strong> <font color=\"#2040a0\">Collection<\/font><font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">E<\/font><font color=\"4444FF\">&gt;<\/font> <strong>extends<\/strong> <font color=\"#2040a0\">Iterable<\/font><font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">E<\/font><font color=\"4444FF\">&gt;<\/font> <font color=\"4444FF\"><strong>{<\/strong><\/font>\n<a name=\"line2\">2<\/a> <font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">T<\/font><font color=\"4444FF\">&gt;<\/font> <font color=\"#2040a0\">T<\/font><font color=\"4444FF\"><strong>[<\/strong><\/font><font color=\"4444FF\"><strong>]<\/strong><\/font> <font color=\"#2040a0\">toArray<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#2040a0\">T<\/font><font color=\"4444FF\"><strong>[<\/strong><\/font><font color=\"4444FF\"><strong>]<\/strong><\/font> <font color=\"#2040a0\">a<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font>\n<a name=\"line3\">3<\/a> <strong>boolean<\/strong> <font color=\"#2040a0\">containsAll<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#2040a0\">Collection<\/font><font color=\"4444FF\">&lt;<\/font>?<font color=\"4444FF\">&gt;<\/font> <font color=\"#2040a0\">c<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font>\n<a name=\"line4\">4<\/a> <strong>boolean<\/strong> <font color=\"#2040a0\">addAll<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"#2040a0\">Collection<\/font><font color=\"4444FF\">&lt;<\/font>? <strong>extends<\/strong> <font color=\"#2040a0\">E<\/font><font color=\"4444FF\">&gt;<\/font> <font color=\"#2040a0\">c<\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font>\n<a name=\"line5\">5<\/a> <font color=\"#2040a0\">Iterator<\/font><font color=\"4444FF\">&lt;<\/font><font color=\"#2040a0\">E<\/font><font color=\"4444FF\">&gt;<\/font> <font color=\"#2040a0\">iterator<\/font><font color=\"4444FF\"><strong>(<\/strong><\/font><font color=\"4444FF\"><strong>)<\/strong><\/font><font color=\"4444FF\">;<\/font>\n<a name=\"line6\">6<\/a> <font color=\"4444FF\"><strong>}<\/strong><\/font>\n<\/pre>\n<p>Yeah, yeah. The fans of C++ would love it, it looks like the C++ templates, compile-time type checking, etc. &#8212; Well, programmers shall figure out other ways of making mistakes like working on a null object :D)<br \/>\nNo way out, I need to learn it &#8216;coz 1.6 is already out and I was still hanging on to 1.4 till yesterday!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Coding in Java was simple until Java 5 (or Java 1.5 &#8212; 1.5 is the developer version and Java 5 is the marketing version as Sun calls it!). Learning generics in Java 1.5 is like learning Microsoft COM programming, it would take at least 5 passes to absorb it right. Look at this simple call, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/posts\/255"}],"collection":[{"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/comments?post=255"}],"version-history":[{"count":0,"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/posts\/255\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/media?parent=255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/categories?post=255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.khaitan.org\/blog\/wp-json\/wp\/v2\/tags?post=255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}