2015-06-14 60 views
3

我有一個通用的爭論問題,這是我的代碼:通用參數「延伸」多類

public <T extends Renderable, Box> void setBackBox(T bb) { 
    ... 
} 

正如你看到的,你可以作爲參數給BB擴展盒&渲染的對象。 但是eclipse給出了以下waring:'類型參數Box是隱藏類型Box'。

我該如何解決這個問題?

回答

4

在這裏,你定義的兩個類型參數:

  • T extends Renderable
  • Box

Box是第二種方法範圍的類型參數的別名,如果您有其他一個具有相同的名稱(類範圍),方法範圍的將隱藏它。這就是Eclipse拋出警告的原因。

如果你想T擴大雙方RenderableBox,你要做的:

public <T extends Renderable & Box> void setBackBox(T bb) 

還要注意的是,當你的類型參數(一個或多個)擴展多種類型,你被允許使用一個類別,它必須在列表中名列第一。例如,如果Box是一個類,正確的定義是:

public <T extends Box & Renderable> void setBackBox(T bb) 
5

在這裏,你定義盒是一個泛型類型參數,它可以隱藏Box類/接口:

public <T extends Renderable, Box> void setBackBox(T bb) 

如果箱是應一個綁定T的接口:

public <T extends Renderable & Box> void setBackBox(T bb) 

如果箱是一個類,應該是一個結合的T:

public <T extends Box & Renderable> void setBackBox(T bb) 

如果Box和Renderable都是類,它們不能都是T的類型邊界。只有第一個類型的bound可以是一個類。