On Mon, 30 Jul 2012 14:55:30 +0200, Ricky Clarkson <[email protected]> wrote:

Java type-system issues:

1. Arrays.asList("foo", "bar") gets the type List<String> when it's the
only thing in the expression, but as soon as you pass it to something else
the type parameter gets inferred to be Object.

Ok, I call this minor.

2. No way of saying that an Iterator<String> is an Iterator<Object> even
though logically it could be (no covariance or contravariance)

This is a major pain, but I still have to see an explanation that shows that covariance in generics doesn't open a serious hole in type safety.

3. Arrays are covariant so the compiler lets you add an invalid item to an
array.

Ditto.

4. List<int> doesn't work. Nothing to do with erasure, as Scala manages it.

Agreed, this is major. But now please tell me how Scala does it :-).

5. null inhabits every reference type (like in lots of other mainstream
languages).

This is complex to debate. In any case, I wouldn't expect anything different from an industrial, general purpose language from the '90s.

6. foreach is not open for extension, i.e., it only works with Iterables
and arrays.

I call this minor.

7. try-with-resources is not open for extension, e.g., it can't be made to
work with locks without wrapper objects.

try-with-resources is completely useless. Lombok's @Cleanup is at least as robust and more flexible.

8. Varargs use arrays.  Given the incompatibility between generics and
arrays (caused by arrays' covariance) this just seems a mistake.  Again,
should be open for extension.

Medium level.

9. No higher kinds. I can't write Monad in Java because there's no way of
saying "this type parameter has a type parameter".  This occasionally
results in either code with warnings or duplication.

I call this minor, unless somebody shows me how Monads would make my life so much better.


--
Fabrizio Giudici - Java Architect, Project Manager
Tidalwave s.a.s. - "We make Java work. Everywhere."
[email protected]
http://tidalwave.it - http://fabriziogiudici.it

--
You received this message because you are subscribed to the Google Groups "Java 
Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to