Compilation error with JDK8

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue Apr 16 07:45:49 PDT 2013


Fixed.

Maurizio

On 03/04/13 10:58, Maurizio Cimadamore wrote:
> Hi,
> this falls into the bucket of 'glitches around capture conversion in
> nested generic method calls'. We are aware of the issue and will work to
> improve the situation. For now, the simplest workaround is to pass an
> explicit type-parameter to the outermost call, as in:
>
> Service.<Vo>getParent(findByPk(vo.getClass(), vo.getId()));
>
>
> Maurizio
>
> On 02/04/13 14:50, Olivier Bourgain wrote:
>> I'm still trying to compile my project with java 8 (b83), I and get another
>> error.
>>
>> Here is the simplest test case I've found which reproduce this error  :
>>
>> ===== Vo.java
>>
>> public interface Vo {
>>      public Integer getId();
>> }
>>
>>
>> ===== Service.java
>>
>> public class Service {
>>
>>      public static <H extends Vo> H getParentById(H vo) {
>>         return (H) getParent(findByPk(vo.getClass(), vo.getId()));
>>      }
>>
>>      public static <H extends Vo> H getParent(H vo) {
>>         return null;
>>      }
>>
>>      public static <H extends Vo> H findByPk(Class<H> voClass, Integer id) {
>>         return null;
>>      }
>> }
>>
>>
>> The error message is :
>>
>> » javac src/*.java
>> src/Service.java:4: error: method getParent in class Service cannot be
>> applied to given types;
>>         return (H) getParent(findByPk(vo.getClass(), vo.getId()));
>>                    ^
>>     required: H#1
>>     found: CAP#1
>>     reason: cannot infer type-variable(s) H#1,H#2
>>       (argument mismatch; Vo cannot be converted to CAP#2)
>>     where H#1,H#2 are type-variables:
>>       H#1 extends Vo declared in method <H#1>getParent(H#1)
>>       H#2 extends Vo declared in method <H#2>findByPk(Class<H#2>,Integer)
>>     where CAP#1,CAP#2 are fresh type-variables:
>>       CAP#1 extends Vo from capture of ? extends Vo
>>       CAP#2 extends Vo from capture of ? extends Vo
>> 1 error
>>
>>
>> The java version :
>> openjdk version "1.8.0-ea"
>> OpenJDK Runtime Environment (build
>> 1.8.0-ea-lambda-nightly-h3797-20130325-b83-b00)
>> OpenJDK Server VM (build 25.0-b21, mixed mode)
>>
>>
>> Olivier Bourgain
>>
>



More information about the lambda-dev mailing list