2017-04-09 21 views
-1

嗨,你們不確定一行代碼 它看起來像下面的層次結構。是什麼意思:MyInterfaceA <MyinterfaceB> myvariable in java?

public interface MyIntA<T extends MyIntB> { 
    //stuff 
} 

,第二個

public interface MyIntB<T extends MyIntC>{ 
//stuff 
} 

,然後在其中的代碼我看到的別的此

MyIntA<MyIntB> var = doStuff(); 

其中doStuff();返回類型爲

<T extends MyIntB> MyIntA <T> 

MyIntA<MyIntB> var怎麼樣被允許?
var是什麼類型? Interface<Interface>的類型?

+0

接口是不是一個「型」 –

+1

'''MyIntA '''因爲公共接口MyIntA '''是允許的。其中'''T'''至少是'''MyIntB'''(泛型協方差)。這似乎是什麼問題 – Sheinbergon

+1

需要一些時間才能適應泛型,所以我理解你的困惑。我不明白你的具體問題。 'var'被聲明爲'MyIntA ',所以'var'的編譯時間類型(因爲'MyIntA'在接口中,它將得到一個更具體的運行時類型)。 –

回答

2

讓我給你一個現有的例子可以幫助你understand-

我們都使用java.util.ListList是一個接口和以下是List

public interface List <E> { 
    void add(E x); 
    Iterator<E> iterator(); 
    ........... 
} 

簽名現在這裏E是變量類型,這將在List被使用。所以,當你聲明一個變量ListInteger您呼叫像下面

List<Integer> list; 

在您的例子同樣的事情正在發生。你定義了一個MyIntA變量,你將使用這個變量來擴展MyIntB

var是什麼類型?接口類型?

Interface不是一個類型..的var類型是一樣的,因爲它是宣佈,這是MyIntA<MyIntB>

有關詳細信息,您可以檢查doc