Bug Report - Type check involving wildcards not sound
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Wed Feb 15 16:11:21 UTC 2023
Hi,
I agree this is a bug. It appears to be a duplicate of this:
https://bugs.openjdk.org/browse/JDK-7045341
I took the liberty of adding your test in there.
Cheers
Maurizio
On 14/02/2023 16:56, Andreas Stadelmeier wrote:
> Hello everybody,
>
>
> I hope this is the right place. I just wanted to report a bug in the javac type-check.
>
> My javac version: javac 19.0.1
> My java version: OpenJDK Runtime Environment (build 19.0.1+10-Ubuntu-1ubuntu122.04)
>
>
> Compiling the following program and running it leads to a runtime error.
>
> I think this is an error, because javac should to declare this program not type correct during compilation time:
>
>
> import java.util.Vector;
>
>
> class Matrix<T> extends Vector<Vector<T>> {
>
> public static void main(String args[]) {
> Vector<Matrix<Integer>> vmInt=new Vector<Matrix<Integer>> ();
> vmInt.add(new Matrix<Integer>());
> Vector<? extends Matrix<?>> vm = vmInt;
> //The following assignment should not be possible:
> Vector<? extends Vector<Vector<?>>> vv = vm;
> Vector<String> vS = new Vector<String>();
> vS.add("String");
> // adding Vector<String> to a Vector<Vector<Integer>>:
> vv.get(0).add(vS);
>
> //Runtime-Error:
> Integer notAnInteger = vmInt.get(0).get(0).get(0);
> }
> }
>
>
> But there is no error during compilation. It generates a class file, which crashes when executed.
> The following:
> javac Matrix.java
> java Matrix
>
> spawns the error:
>
> Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
> at Matrix.main(Test.java:15)
>
>
> Best Regards,
> -Andi
More information about the compiler-dev
mailing list