Please enter a bug report in Eclipse
bugzilla against JDT core.
John
Bojan Antonovic <bojan@xxxxxxxxxxxxx> Sent by: platform-dev-bounces@xxxxxxxxxxx
22/07/2006 07:35 PM
Please respond to
"Eclipse platform general developers list." <platform-dev@xxxxxxxxxxx>
To
platform-dev@xxxxxxxxxxx
cc
Subject
[platform-dev] generics: different behaviour
between Eclipse 3.2 and Sun's javac
I have the problem that Eclipse 3.2 and Sun's javac
behave differently
for Java generics. Eclipse accepts more, or Sun's javac (up to Java 6
Beta 2) is more strict, or one of them is buggy.
Example 1:
public <T> Class<? extends T> fooGetClass(final
T object) {
return object.getClass();
}
Eclipse reports no warnings. javac says:
smood/GetClassTest.java:6: incompatible types
found : java.lang.Class<capture of ? extends java.lang.Object>
required: java.lang.Class<? extends T>
return object.getClass();
I think I've read that this is an exception in the JLS, which Eclipse
supports correctly, but I'm not sure. If I use a cast
public <T> Class<? extends T> fooGetClass(final
T object) {
return (Class<? extends T>) object.getClass();
}
javac doesn't complain (it compiles the code), but Eclipse reports a
necessary cast.
Example 2:
public static <T extends Comparable<T>> T
readComparableParameter(ComparableParameter<T> parameter {
// some code
}
using it in
for (ComparableParameter<? extends Comparable<?>>
parameter:
parameterSet)
{
readComparableParameter(parameter);
}
leads to a pattern matching problem in javac.
I have many of things strange behaviours, specially when using wildcards.
I'm using Java generics since more than 1 year, but still I have
sometimes problems. Mostly with erasure. BTW, who invented the bullshit
that
does? This distinction is absolut useless, and against all OOP
principles! It just enforces you to write "? extends" everywhere!
Or that the wildcard is sometimes higher that Object!
Why can't I have the class of Map as Class<Map<?,?>>, but only
Class<Map>, even if I can't have Class<Map<K,V>> because
of erasure? How
can I avoid raw types, as there's a new warning in Eclipse 3.2, when
this doesn't work. But you can create:
Map<?,?>[] mapArray=new Map<?,?>[5];
Sorry for mixing but reports with design problems and listening to my
frustrations. But I'm sometimes forced to go back to raw types as I
can't figure out how to use generics. Transforming a project of 40'000
LOC in Java to Java 5 is more complicated if you have strange
restrictions. Or bugs like
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6218229.
greetings
Bojan
_______________________________________________
platform-dev mailing list
platform-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-dev