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