Improving readability of type/casting error messages

Maurizio Cimadamore maurizio.cimadamore at
Fri Dec 5 17:56:58 UTC 2014

On 05/12/14 02:05, cowwoc wrote:
> I'll start by discussing a seemingly benign error message:
> incompatible types: bad return type in lambda expression
>      Promise<Optional<GetPostalCode>> cannot be converted to Optional
Hi Gili,
are you sure you are pasting the entire output? Or maybe something more 
subtle is going on? Look at this example:

import java.util.function.*;
import java.util.*;

class Test {
     void test() {
         m(ls -> ls);

     void m(Function<List<String>, List<Integer>> l) { }

Which gives this: error: incompatible types: bad return type in lambda expression
         m(ls -> ls);
     List<String> cannot be converted to List<Integer>

Note that both actual and expected type are shown after type 
substitution. I don't exactly get why you are getting a bare 'Option' in 
your example - is some unchecked conversion going on?


More information about the compiler-dev mailing list