This confuses me. The following compiles fine under Eclipse.
package com.example.gotchas;
public class GenericHelper1 {
static <T> T fail() throws UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
/**
* just calls fail()
* @return something maybe
*/
public boolean argh() { return fail(); }
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
But if I try to do a clean build with ant, or at the command line with javac, I get this:
src\com\example\gotchas\GenericHelper1.java:14: type parameters of <T>T cannot be determined; no unique maximal instance
exists for type variable T with upper bounds boolean,java.lang.Object
public boolean argh() { return fail(); }
^
1 error
what gives, and how do I fix it?
There are inconsistencies between the two compilers. I’ve found similar bugs, sometimes in Eclipse and sometimes in the JDK.
I’m not sure which is wrong in this case. The problem appears to be due to the combination of
generics and auto-boxing.
In any case, if you specify the type parameter explicitly, instead of relying on type inference, it will compile: