Relates :
|
|
Relates :
|
|
Relates :
|
Create an empty directory and copy into it the following two sources: Ref.java: public class Ref<T> { final RefQueue<? super T> queue = new RefQueue<>(); public static void main(String[] args) { Ref<Object> r = new Ref<>(); RefQueue<Object> q = r.queue; } } RefQueue.java: public class RefQueue<T> {} Then execute: mkdir out javac -d out Ref.java This compiles fine and produces two class files in out directory: Ref.class RefQueue.class Now do the following: mkdir out2 rm RefQueue.java javac -cp out -d out2 Ref.java Which produces compile-time error: Ref.java:6: error: incompatible types: RefQueue<CAP#1> cannot be converted to RefQueue<Object> RefQueue<Object> q = r.queue; ^ where CAP#1 is a fresh type-variable: CAP#1 extends Object super: Object from capture of ? super Object 1 error reported by Peter Levart at compiler-dev: http://mail.openjdk.java.net/pipermail/compiler-dev/2014-January/008457.html
|