We currently have one class that won't compile with openjdk 6. The following shortened class reproduces this error:
public class Copy implements ICopy {
public <A,B extends List<A>,C extends Map<A,B>> A method(A a, B b) {
A something = null;
return something;
}
@Override
public <A,B extends List<A>> A method2(A a, B b) {
return method(a,b);
}
}
The interface is simple, it just shows, that we can't change the signature of the method2
:
public interface ICopy {
public <A,B extends List<A>> A method2(A a, B b);
}
It compiles with oracles java versions and openjdk 7 - but fails with openjdk 6, and, unfortunatly, that's the version that we have to use to compile the (original) code.
The error message is
Copy.java:15: invalid inferred types for C; inferred type does not conform to declared bound(s)
inferred: java.util.Map<A,B>
bound(s): java.util.Map<A,B>
return method(a,b);
^
All I need are some ideas how to change the implementation of method2
so that it would compile. I wouldn't even care about compiler warnings...
I would try specifying the bounds explicitly, like this:
return this.<A,B,Map<A,B>>method(a,b);
However, more generally, I don't see the need for the type parameter C
at all. None of method
's arguments or its return type references C
at all, so if you can change the signature of method
, I would just omit that type parameter entirely.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With