Java ternary operator influence on generics type inference

后端 未结 2 829
孤独总比滥情好
孤独总比滥情好 2020-12-17 08:40
public List foo1() {
    List retval = bar();
    if (retval == null)
        return Collections.emptyList();
    else
        return ret         


        
相关标签:
2条回答
  • 2020-12-17 09:15

    Compiles for me fine in java 8.

    Earlier versions of Java might need more help

    return retval == null ? Collections.<String>emptyList() : retval;
    

    should work.

    EDIT This is due to improvements in Java 8 type inference as explained here

    http://openjdk.java.net/jeps/101

    And here's a blog with the highlights: http://blog.jooq.org/2013/11/25/a-lesser-known-java-8-feature-generalized-target-type-inference/

    0 讨论(0)
  • 2020-12-17 09:21

    This is related with Type Inference from a generic method.

    In case of code before ver. 8. It must be declared the type of result for this case.

    return retval == null ? Collections.<String>emptyList() : retval;

    Since ver. 8 notion of what is a target type has been expanded to include method arguments. So this is no longer required.

    0 讨论(0)
提交回复
热议问题