On 3/18/2011 10:01 AM, assembling signals wrote:
Hello, community!

I noticed a new error since b134: "Cannot use '<>' with anonymous inner 
classes".
The code uses diamond syntax and was error-free before b134.
(Please see reproducible example at the end.)

Can someone explain: is this error even intended?
If so, why this is necessary? If not, is it possible to revert to old behavior?

(BTW: Latest Netbeans even allow to refactor anon-inner-classes to use diamond 
syntax.)

Best regards,
Ivan G Shevchenko



As described in the recently published Project Coin documentation for the developer preview [1], using diamond with anonymous inner class is specifically disallowed:

It is a compile-time error if a class instance creation expression declares an anonymous class but uses "<>" in place of a class type argument list.

It is noted in the document that

(Note that javac in the JDK 7 developer preview erroneously accepts diamond combined with non-generic classes and accepts some uses of diamond with anonymous inner classes. These bugs will be corrected in future builds.)

The future has arrived in b134 :-)

The discussion section of the feature has a brief rationale for this change:

Using diamond with anonymous inner classes is /not/ supported since doing so in general would require extensions to the class file signature attribute to represent non-denotable types, a de facto JVM change.

The public review draft of JSR 334 will have a more in-depth discussion.

Cheers,

-Joe


[1] http://cr.openjdk.java.net/~darcy/ProjectCoin/ProjectCoin-Documentation-v0.83.html

Reply via email to