Need help with error message

Vicente-Arturo Romero-Zaldivar vicente.romero at oracle.com
Mon Sep 9 07:25:58 PDT 2013


Hi Boaz,

Ok let's make sure we are talking about the same thing.

I have this code:

MyData.java

import java.util.*;

class MyData {

         public List<String> getList(List<Integer> keys) {
             int i = keys.get(0);
             return null;
         }

         MyData data = new MyData();

         //this is wrong, should be List<Integer>
         List keys = new ArrayList();

         String item= data.getList(keys).get(0);
}

if compiled with last tl/langtools, not lambda, here I could have used 
bold or capital letters as you did but I think it's not necessary. I got 
the following:

MyData.java:15: error: incompatible types: Object cannot be converted to 
String
     String item= data.getList(keys).get(0);
                                        ^
Note: MyData.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

the if I compile with -Xlint:unchecked**as the compiler is suggesting I get:

MyData.java:15: warning: [unchecked] unchecked method invocation: method 
getList in class MyData is applied to given types
     String item= data.getList(keys).get(0);
                              ^
   required: List<Integer>
   found: List
MyData.java:15: warning: [unchecked] unchecked conversion
     String item= data.getList(keys).get(0);
                               ^
   required: List<Integer>
   found:    List
MyData.java:15: error: incompatible types: Object cannot be converted to 
String
     String item= data.getList(keys).get(0);
                                        ^
1 error
2 warnings

I guess I have reproduced you test case, let me know if you consider 
that there is something missing.

Thanks,
Vicente



On 09/09/13 14:55, Boaz Nahum wrote:
> Thanks.
> But I think You ignore my question.
> Sure the compiler should warn on unchecked. That what it does in JDK 
> 7, but in JDK 8 it doesn't. Instead it raise an error on the 
> assignment of the result of get(0) to String.
>
> You also ignored the fact the splitting the code into two lines 
> eliminated the error message although the unchecked call, and 
> _*doesn't produce unchecked warning message.*_
>
> IMHO it is compiler bug.
>
>
>
>
> On Mon, Sep 9, 2013 at 4:43 PM, Vicente-Arturo Romero-Zaldivar 
> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>
>     Hi Boaz,
>
>     The compiler is indicating that there are unchecked warnings in
>     the code, if you don't solve them and go on, then you can't expect
>     the compiler to do all the checking or figure out what the correct
>     type should be.
>
>     Here the code should be:
>
>     List<Integer> keys = new ArrayList<>();  or:
>
>     List<Integer> keys = new ArrayList<Integer>()
>
>     also lambda repo is not up to date anymore, you should use
>     tl/langtools instead.
>
>     Thanks,
>     Vicente
>
>
>     On 09/09/13 13:53, Boaz Nahum wrote:
>>     Build lambda/lambda repo today.
>>
>>     The compiler error is strange
>>
>>     public List<String> getList(List<Integer> keys) {
>>       return null;
>>     }
>>
>>     MyData data = new MyData();
>>
>>     //this is wrong, should be List<Integer>
>>     List keys = new ArrayList();
>>
>>     String item= data.getList(keys).get(0);
>>
>>     The error message is:
>>     java: incompatible types: java.lang.Object cannot be converted to
>>     java.lang.String
>>
>>     But if I split it to:
>>     List<String> list = data.getList(keys);
>>                String item = list.get(0);
>>
>>     then it compile fine.
>>
>>     The error message remind smells like compiler treats getList as
>>     generic method.
>>
>>     Thanks
>>     Boa
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20130909/1eaae176/attachment.html 


More information about the compiler-dev mailing list