Multiple return values
This RFE has now been marked 'Closed, will not be fixed': http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4222792
The reasons given are (paraphrased by me):
1. It would probably require incompatible changes to the JVM, and the cost of this isn't outweighed by the benefits.
2. The JDK hasn't obviously suffered from the lack multiple return values so far, so would probably make little use of them. This shows it's not an important feature.
3. The logically correct way to return multiple values is to encapsulate them in an object, for instance returning Point is better than returning (int,int). (I think that's what is meant by 'verbose' being better than 'implicit' declarations.)
I find the 3rd point dubious. By this argument, you should only be able to pass a single parameter to a method, since multiple values could be packed into a single object. But of course, multiple values are often not logically related, so you can't define a sensible class to pack the values into. And if you did define such a class, it might only be used once. IMHO the same goes for multiple return values. There's no reason why a method shouldn't produce several results that are unrelated, and so can't be packed into a sensible class.
The example of Point versus (int,int) is specious: of course if a method returns something that's logically a point, a Point object should be returned. But what if (say) a method detecting a mouse click returns a point and a time? You could create a PointTime class, which probably would only be used in this one place; this is not only clunky but it's also just a workaround. The logically correct behaviour is to return two separate entities, a point and a time, and this should be expressible in the code.
Re the 2nd point, that there's no clear need for multiple return values in the JDK: I presume the JDK must have just used workarounds in various places to avoid this limitation. Either by using dubious classes analogous to PointTime, or using several method calls to return several values instead of a single call. Can anyone think of any examples?