<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: What&#8217;s Next for the Java Language?</title>
	<atom:link href="http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/</link>
	<description>Musings of a software developer in Milwaukee, WI.</description>
	<pubDate>Thu, 20 Nov 2008 17:52:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: Zorched / One Line Fix &#187; Welcome Java 6</title>
		<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/#comment-2279</link>
		<dc:creator>Zorched / One Line Fix &#187; Welcome Java 6</dc:creator>
		<pubDate>Thu, 14 Dec 2006 03:32:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.zorched.net/?p=10#comment-2279</guid>
		<description>[...] Similarly tagged posts Hibernate Query TranslatorsjMock For Mocking Unit TestsHibernate HQL And PerformanceRelentless Build AutomationContinuous Integration RevisitedTapestry and Hibernate Take 2Why Do Tapestry and Hibernate Fight So Much?Remoting: Tight or Loose Coupling?What's Next for the Java Language?More On MSBuildMSBuild with NUnitFake Materialized ViewsPragmatic Project AutomationAjax with JSON using PHP and DOJOOracle Materialized ViewsRJS Templates for RailsSubversion Maintenance ScriptsJavascript Code FormattingJavascript 1.7 in Firefox 2.0Getting the Revision Number of your Subversion Working CopyMKE Ruby GroupMilwaukee Wisconsin Ruby BrigadeJavaScript ToolkitsMore WebDAV Tips, Tricks and BugsRuby Features You'll Wish You Had In Other LanguagesRuby Quiz Metaprogramming ChallengeRuby SOAP4R For Web ServicesCustom WebDAV Server Using .NETExcellent Cheat SheetsRuby REXML - Another Take on XML ParsingASP.NET Web Application Without .ASPX ExtensionWhat are Decentralized Revision Control Systems.NET Nullable Types and DBNull Expose Design FlawsFastSOA DiscussionVS.NET Developers Should Use ReSharperServer Side Include (SSI) Templating [...]</description>
		<content:encoded><![CDATA[<p>[...] Similarly tagged posts Hibernate Query TranslatorsjMock For Mocking Unit TestsHibernate HQL And PerformanceRelentless Build AutomationContinuous Integration RevisitedTapestry and Hibernate Take 2Why Do Tapestry and Hibernate Fight So Much?Remoting: Tight or Loose Coupling?What&#8217;s Next for the Java Language?More On MSBuildMSBuild with NUnitFake Materialized ViewsPragmatic Project AutomationAjax with JSON using PHP and DOJOOracle Materialized ViewsRJS Templates for RailsSubversion Maintenance ScriptsJavascript Code FormattingJavascript 1.7 in Firefox 2.0Getting the Revision Number of your Subversion Working CopyMKE Ruby GroupMilwaukee Wisconsin Ruby BrigadeJavaScript ToolkitsMore WebDAV Tips, Tricks and BugsRuby Features You&#8217;ll Wish You Had In Other LanguagesRuby Quiz Metaprogramming ChallengeRuby SOAP4R For Web ServicesCustom WebDAV Server Using .NETExcellent Cheat SheetsRuby REXML - Another Take on XML ParsingASP.NET Web Application Without .ASPX ExtensionWhat are Decentralized Revision Control Systems.NET Nullable Types and DBNull Expose Design FlawsFastSOA DiscussionVS.NET Developers Should Use ReSharperServer Side Include (SSI) Templating [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rossi</title>
		<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/#comment-65</link>
		<dc:creator>Rossi</dc:creator>
		<pubDate>Mon, 27 Feb 2006 22:48:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.zorched.net/?p=10#comment-65</guid>
		<description>About finalize():  Not only do you not know when a GC will be performed, it is possible that a GC may NEVER be called.  This is one of the reasons that finalize() is relegated to the same chapter as the GOTO statement.  :)  

One can guarantee (to some extent) object cleanup by using a try/finally block, but that puts the responsibility on the consumer of a particular class, not the class' designer.  Obviously the dispose() method comes from the C++ destructor concept, which never really got ported to Java (other than the half-a$$ attempt called finalize().</description>
		<content:encoded><![CDATA[<p>About finalize():  Not only do you not know when a GC will be performed, it is possible that a GC may NEVER be called.  This is one of the reasons that finalize() is relegated to the same chapter as the GOTO statement.  :)  </p>
<p>One can guarantee (to some extent) object cleanup by using a try/finally block, but that puts the responsibility on the consumer of a particular class, not the class&#8217; designer.  Obviously the dispose() method comes from the C++ destructor concept, which never really got ported to Java (other than the half-a$$ attempt called finalize().</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Geoff Lane</title>
		<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/#comment-6</link>
		<dc:creator>Geoff Lane</dc:creator>
		<pubDate>Sat, 29 Oct 2005 17:39:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.zorched.net/?p=10#comment-6</guid>
		<description>Enums in Java are improved over Enums in .NET. Enums in Java are a full class, so they can have methods and other data. Basically, they've built-in the Enum Pattern but added the flexibility that you can use them as Integral types for things like switch statements and the like.

Generics are wonderful! They increase the readability and intentionality of the code. They allow other people that are using your code to more easily know how to use it, and better than comments they are compile time checked. So, if you don't know what a collection takes, the generics force you to know.
(By the way, C# 2.0 has Generics and it was just released to MSDN on Oct. 28th)

With Generics:
&lt;code&gt;
list.get(i).getValue();
&lt;/code&gt;

vs. Without Generics:

&lt;code&gt;
((MyObject) list.get(i)).getValue();
&lt;/code&gt;

The other thing is that Generics are not only useful for Collections classes, but can be used by other, more general classes. It allows you to provide general functionality and an implementer to declare their own type safety mechanisms.

&lt;code&gt;
public  &#60;T extends Person &#38; Comparable&#62;void doSomething(T person) {
    // ...
}
&lt;/code&gt;

Again, with something like this you don't have to test if the object passed in is both a Person and Comparable, you know that the compiler has confirmed this for you.

In the end, I think generics have the possibility of reducing errors and increasing readability of the intentions of the programmer, both of which are Good Things &mark;.</description>
		<content:encoded><![CDATA[<p>Enums in Java are improved over Enums in .NET. Enums in Java are a full class, so they can have methods and other data. Basically, they&#8217;ve built-in the Enum Pattern but added the flexibility that you can use them as Integral types for things like switch statements and the like.</p>
<p>Generics are wonderful! They increase the readability and intentionality of the code. They allow other people that are using your code to more easily know how to use it, and better than comments they are compile time checked. So, if you don&#8217;t know what a collection takes, the generics force you to know.<br />
(By the way, C# 2.0 has Generics and it was just released to MSDN on Oct. 28th)</p>
<p>With Generics:<br />
<pre><code>
list.get(i).getValue();
</code></pre></p>
<p>vs. Without Generics:</p>
<p><pre><code>
((MyObject) list.get(i)).getValue();
</code></pre></p>
<p>The other thing is that Generics are not only useful for Collections classes, but can be used by other, more general classes. It allows you to provide general functionality and an implementer to declare their own type safety mechanisms.</p>
<p><pre><code>
public  &amp;lt;T extends Person &amp;amp; Comparable&amp;gt;void doSomething(T person) {
    // ...
}
</code></pre></p>
<p>Again, with something like this you don&#8217;t have to test if the object passed in is both a Person and Comparable, you know that the compiler has confirmed this for you.</p>
<p>In the end, I think generics have the possibility of reducing errors and increasing readability of the intentions of the programmer, both of which are Good Things &mark;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/#comment-5</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Sat, 29 Oct 2005 17:19:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.zorched.net/?p=10#comment-5</guid>
		<description>The language features that you list for 1.6 all seem to fall into a category of languages that I have seen described as 'Freedom Languages'.  C# and Java are business languages in this categorization. Ruby, Python, Smalltalk, etc are freedom languages.  If you have two sons, one trustworthy, one decidely not, then you may give them each a different level of freedom because of the likely consequences.  One can't be trusted with the car, one can.  One can't be trusted babysitting the sister, one can.  In the business world, you can't tell which programmer can be trusted and which one can't, because typically your experience with that individual can be limited.  The consequences of giving an untrustworthy developer can be disastorous.  Bad programmers do so many funky things anyways, can you imagine what they would do with Full Closures, Coroutines, etc?  

Freedom is needed by good programmers, and freedom helps the programmer to flourish, to dream up solutions that are ever more elegant and useful.  Freedom languages are needed by good programmers as an outlet for their personal or open source projects so that they can implement ideas more quickly and with more butter.  There is so much risk though in the business(millions$$$$) world that the advantages of freedom languages and features are outweighed.

PROPERTIES

I think properties as an implementation detail may be redundant.  They do though have a tendancy to communicate to developers the make-up of a state of an object.  The 'Get' word can mean different things and has the possibility to confuse what is a method accessing state and what is a method performing some action. The real world command 'Get me some milk'  can have many different steps behind it, you could be getting in your car and going to the store, or you could be opening the refridgerator, pulling out the milk and checking for it's expiration.  The possibly exists to put many different steps behind a property, for sure, but this is typically done when wanting to present the action as state, rather than action (ahhhh abstraction).  Subtle difference?  Large difference?  What does the tech blogging world or Geoff think?</description>
		<content:encoded><![CDATA[<p>The language features that you list for 1.6 all seem to fall into a category of languages that I have seen described as &#8216;Freedom Languages&#8217;.  C# and Java are business languages in this categorization. Ruby, Python, Smalltalk, etc are freedom languages.  If you have two sons, one trustworthy, one decidely not, then you may give them each a different level of freedom because of the likely consequences.  One can&#8217;t be trusted with the car, one can.  One can&#8217;t be trusted babysitting the sister, one can.  In the business world, you can&#8217;t tell which programmer can be trusted and which one can&#8217;t, because typically your experience with that individual can be limited.  The consequences of giving an untrustworthy developer can be disastorous.  Bad programmers do so many funky things anyways, can you imagine what they would do with Full Closures, Coroutines, etc?  </p>
<p>Freedom is needed by good programmers, and freedom helps the programmer to flourish, to dream up solutions that are ever more elegant and useful.  Freedom languages are needed by good programmers as an outlet for their personal or open source projects so that they can implement ideas more quickly and with more butter.  There is so much risk though in the business(millions$$$$) world that the advantages of freedom languages and features are outweighed.</p>
<p>PROPERTIES</p>
<p>I think properties as an implementation detail may be redundant.  They do though have a tendancy to communicate to developers the make-up of a state of an object.  The &#8216;Get&#8217; word can mean different things and has the possibility to confuse what is a method accessing state and what is a method performing some action. The real world command &#8216;Get me some milk&#8217;  can have many different steps behind it, you could be getting in your car and going to the store, or you could be opening the refridgerator, pulling out the milk and checking for it&#8217;s expiration.  The possibly exists to put many different steps behind a property, for sure, but this is typically done when wanting to present the action as state, rather than action (ahhhh abstraction).  Subtle difference?  Large difference?  What does the tech blogging world or Geoff think?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.zorched.net/2005/10/26/whats-next-for-the-java-language/#comment-4</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Sat, 29 Oct 2005 16:40:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.zorched.net/?p=10#comment-4</guid>
		<description>I love most of the features in 1.5, Autoboxing being by far my favorite.  If everything is an object, then why not have EVERYthing be an object?  Varargs are cool, and allow great flexibility without destroying type safety.  Enums are nice to have, but in .NET I always end up using the 'java enum' pattern anyways.  I always want to say so much more about a particular status or label, most of the time I would like to have a user viewable version of that enum.  Why can't they implement enums based on strings?  Annotations seem nice to intellectually but I don't ever find myself saying, "This is the perfect place for Annotations!".   I don't use them.  And then Generics..............

I CAN'T STAND GENERICS

They make no sense to me.  Maybe I haven't had so much experience with them because .NET doesn't have a similiar type of thing, but Generics to me go one step too far in the battle for type safety.  To me, if you don't know what is going to be in a certain arraylist then you don't understand what the system is doing.  Generics add COMPLEXITY to development in that you have to think through an extra set of technical implementation details when you really want to be thinking about the problem and how to solve it.  The complexity is unneeded and detrimental to a languages ease-of-use.</description>
		<content:encoded><![CDATA[<p>I love most of the features in 1.5, Autoboxing being by far my favorite.  If everything is an object, then why not have EVERYthing be an object?  Varargs are cool, and allow great flexibility without destroying type safety.  Enums are nice to have, but in .NET I always end up using the &#8216;java enum&#8217; pattern anyways.  I always want to say so much more about a particular status or label, most of the time I would like to have a user viewable version of that enum.  Why can&#8217;t they implement enums based on strings?  Annotations seem nice to intellectually but I don&#8217;t ever find myself saying, &#8220;This is the perfect place for Annotations!&#8221;.   I don&#8217;t use them.  And then Generics&#8230;&#8230;&#8230;&#8230;..</p>
<p>I CAN&#8217;T STAND GENERICS</p>
<p>They make no sense to me.  Maybe I haven&#8217;t had so much experience with them because .NET doesn&#8217;t have a similiar type of thing, but Generics to me go one step too far in the battle for type safety.  To me, if you don&#8217;t know what is going to be in a certain arraylist then you don&#8217;t understand what the system is doing.  Generics add COMPLEXITY to development in that you have to think through an extra set of technical implementation details when you really want to be thinking about the problem and how to solve it.  The complexity is unneeded and detrimental to a languages ease-of-use.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
