SPUG: software libertarianism (was: Scope question)

Tom Legrady legrady at earthlink.net
Mon Jun 17 14:33:40 CDT 2002

If we're playing "what's wrong with Java", I'll take my term as the next contestant. Since I got laid off, and need something to pass my time while waiting for jobs to become 
available, I've been learning Java, to add to my arsenal.

1) Arrays and Collections: You can initialize a collection from another collection, but yoiu can't initialize a collection from an array.

	// good
	Vector myVector = new Vector();
	myVector.add( "string 1" );
	myVector.add( "string 2" );
	ArrayList myArrayList = new ArrayList( myVector );	

	// not good
	String[] myStringArray = new String[] { "string 1", "string2" };
	ArrayList myArrayList = new ArrayList( myStringArray );

While collections are in many ways more convenient than arrays, arrays decorate the type of the objects being stored, while collections conceal it. If I write a method which 
takes a String[], I don't have to worry about someone invoking it with an Integer[], but if my method takes an ArrayList, who knows what type it contains? In certain cases, 
that's good; since every class implements toString, if I simply want to print something, the ArrayList is more polymorphic. But if I want to do something more specific, I need 
specific types.

2) Streams, Readers, Writers, Channels: Being able to obtain varying capabilities by wrapping streams and readers around each other is an interesting idea, but figuring out 
what sequence of IO classes you need to get the desired end result is a challenge. 

This class only reads into a byte[], that one only processes a char[], the other requires a String.

I suppose it isn't so much a language problem as a documentation problem, needing a simple way to know which classes to mix and match for the desired result.

3) Exceptions: Exceptions are wonderful, but their enforcement is pedantic. Since you have to handle exceptions, anyway, it discourages checking conditions. For 
example, you can verify myFile.exists() && myFile.canRead(), but you still have to handle FileNotFoundException. Further, if you have a return statement within a try block, 
java complains  that the method can exit without a return.

Something which REALLY irritates me, but isn't really the fault of Java, but rather of the IDE I use .... When I'm typing in code, Forte helpfully displays a tooltip suggesting 
completions for the methods which are valid at this point. I love that, especially as a beginner, it means I can spend almost as much time in the IDE as I do browsing the API 
for the classes and methods I need. The tooltip mentions exceptions which may be thrown. But as soon as the method has been written down, and I'm ready to write the 
catch line, the tooltip disappears. If I didn't pay enough attention, I have to make the tooltip re-appear, or scan through the API, to determine the correct exception to list.

Overall, I would categorize Java as a low-level language, like C & C++, more suitable for implementing libraries and high-level, application-specific languages. 

Tom Legrady

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org

More information about the spug-list mailing list