Summary
The javac compiler should not accept private method references with a type variable receiver.
Problem
JLS 4.4 specifies that:
The members of a type variable X with bound T & I 1 & ... & I n are the members of
the intersection type (ยง4.9) T & I 1 & ... & I n appearing at the point where the type
variable is declared.
So code like:
import java.util.function.*;
class Test {
private String asString() {
return "bar";
}
static <T extends Test> Function<T, String> foo() {
return T::asString;
}
}
should be rejected by javac as private method asString
is not a member of type variable T
Solution
The proposed solution is to sync javac with the specification so that private method references with type variable receiver are rejected by javac
Specification
No specification changes are required.
- csr of
-
JDK-8318160 javac does not reject private method reference with type-variable receiver
- Resolved