issue with fix for JDK-8064464
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Nov 24 22:01:39 UTC 2014
Hi Liam,
the JLS defines an operand of a conditional expression to be
numeric/boolean in case it is a method call with the following wording:
"A method invocation expression (§15.12) for which the chosen most
specific method (§15.12.2.5) has return type boolean or Boolean.
*Note that, for a generic method, this is the type
**/before/**instantiating the method's type arguments.*"
(oddly, the statement in bold only appears in the section on boolean
conditionals, and not in the one about numeric conditionals, but I
believe that's a mistake - i.e. the same statement should be present on
both).
This seems to suggest that your example should not compile, as the
uninstantiated method return type would be T, which is not a numeric type.
However, this seems like a case where the analysis could be improved a
bit - as far as I recall, this rule is mostly there to prevent excessive
speculative type-checking during classification of the conditional
expression; so it seems like taking into account explicit type
parameters could be doable (although maybe tricky to specify). I'll
leave this with Dan for further evaluation.
Thanks
Maurizio
On 24/11/14 19:37, Liam Miller-Cushon wrote:
> The fix for JDK-8064464 [1] [2] prevents the following code from
> compiling (it works fine with 8u25 and 7u67). Is this deliberate?
>
> abstract class Test {
> abstract <T> T e();
> abstract int f();
> void m(boolean flag) {
> String.valueOf(flag ? f() : this.<Integer>e());
> }
> }
>
> $ javac Test.java
> Test.java:5: error: reference to valueOf is ambiguous
> String.valueOf(flag ? f() : this.<Integer>e());
> ^
> both method valueOf(Object) in String and method valueOf(int) in
> String match
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8064464
> [2] http://hg.openjdk.java.net/jdk9/dev/langtools/rev/601e08b62ba8
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20141124/cdea3622/attachment-0001.html>
More information about the compiler-dev
mailing list