簡體   English   中英

Java三元運算符對泛型類型推斷的影響

[英]Java ternary operator influence on generics type inference

public List<String> foo1() {
    List<String> retval = bar();
    if (retval == null)
        return Collections.emptyList();
    else
        return retval;
}

public List<String> foo2() {
    List<String> retval = bar();
    return retval == null ? Collections.emptyList() : retval;
}

為什么foo1()編譯得很好而foo2()有錯誤? (更准確地說“類型不匹配:無法從List <capture#1-of?extends Object>轉換為List <String>”

我原以為這兩個函數都會編譯成相同的字節碼,所以一個聰明的編譯器應該推斷出emptyList()的正確類型...

在java 8中編譯我很好。

早期版本的Java可能需要更多幫助

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

應該管用。

編輯這是由於Java 8類型推斷的改進,如此處所述

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

這里有一個高亮的博客: http//blog.jooq.org/2013/11/25/a-lesser-known-java-8-feature-generalized-target-type-in​​ference/

這與通用方法中的類型推斷有關。

如果是ver之前的代碼。 8.必須聲明此案例的結果類型。

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

自從ver。 8目標類型的概念已經擴展到包括方法參數。 所以這不再需要了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM