簡體   English   中英

為什么將“(F obj)”中的F替換為Factory時會引發類型不匹配錯誤。 編譯時F是什么

[英]Why Type mismatch error is thrown up when F in “(F obj)” is replaced with Factory. What is F at compile time

為什么將“(F obj)”中的F替換為Factory時會引發類型不匹配錯誤。 在編譯時F是什么,是Object還是編譯時F。

interface Factory<T>
{
    T create();
}

class FirstClass<T>
{
    T x;
    <F extends Factory<T>> FirstClass(F obj)// Error will be thrown when F in (F obj)                                                  
                                            // is replaced with Factory. Error will be
                                            // cannot convert from "Object to T"
    {
        x = obj.create();
    }
}


class integerFactory implements Factory<Integer>
{

    @Override
    public Integer create() {

        return 1000;
    }

}

public class testGenerics {

    public static void main(String[] args) {
        new FirstClass<Integer>(new integerFactory());
    }

}

編譯錯誤是針對語句x = obj.create();

這是因為Factory原始類型

通過采用通用類型聲明的名稱而沒有隨附的類型參數列表形成的引用類型。

原始類型是對其參數化類型的擦除

類型變量(例如T )的擦除是其最左邊界

如果沒有為類型變量聲明邊界,則假定為對象。

因此,原始類型Factory的方法create返回Object

我們不知道FirstClass<T> T是什么,所以我們不知道是否可以將Object賦給它。

也可以看看:

暫無
暫無

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

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