Relates :
|
The following (adapted from Netbeans code in ResultSetJXTable) should compile, but does not after JDK-8033718. The inferred type is correct -- an intersection CAP#1 & Cloneable -- but the error produced afterwards is wrong. interface RowFilter<X> {} <R extends Cloneable> void setRowFilter1(RowFilter<? super R> filter) { setRowFilter2(filter); // expected: ok; actual: error } <T extends Cloneable> void setRowFilter2(RowFilter<? super T> filter) { } } --- error: method setRowFilter2 in class RowFilterError cannot be applied to given types; setRowFilter2(filter); ^ required: RowFilter<? super T> found: RowFilter<CAP#1> reason: inferred type does not conform to upper bound(s) inferred: INT#1 upper bound(s): CAP#1,Cloneable where T,R are type-variables: T extends Cloneable declared in method <T>setRowFilter2(RowFilter<? super T>) R extends Cloneable declared in method <R>setRowFilter1(RowFilter<? super R>) where CAP#1 is a fresh type-variable: CAP#1 extends Object super: R from capture of ? super R where INT#1 is an intersection type: INT#1 extends CAP#1,Cloneable