FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM :
Please check the code I submit.
Runtime generic cast should throw an exception.
And there should be a way to get the actual generic parameter type.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
We know that the future of the execution should be Future<Boolean>.
But runtime cast doesn't throw any exception.
And we are not able to know the actual generic parameter type anymore.
ACTUAL -
V
V
XXXXXXXXfalse
V
YYYYYYYYfalse
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
                Future<?> aaa = Executors.newCachedThreadPool().submit(new Callable<Boolean>() {
                    @Override
                    public Boolean call()
                    {
                        return false;
                    }
                });
                System.out.println(((ParameterizedType)aaa.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]);
                Future<Boolean> temp = (Future<Boolean>) aaa;
                System.out.println(((ParameterizedType)temp.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]);
                System.out.println("XXXXXXXX" + (temp == null));
                Future<Integer> temp1 = (Future<Integer>) aaa;
                System.out.println(((ParameterizedType)temp1.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]);
                System.out.println("YYYYYYYY" + (temp1 == null));
---------- END SOURCE ----------