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