我对泛型参数有疑问,这是我的代码:
public <T extends Renderable, Box> void setBackBox(T bb) {
...
}
如你所见,你可以给出参数bb一个扩展Box&amp;的对象。渲染。 但是eclipse给出了以下警告:'类型参数Box隐藏了类型Box'。
我该如何解决这个/解决它?
答案 0 :(得分:6)
在这里,您将Box定义为泛型类型参数,该参数隐藏Box
类/接口:
public <T extends Renderable, Box> void setBackBox(T bb)
如果Box是一个应该是T的界面:
public <T extends Renderable & Box> void setBackBox(T bb)
如果Box是一个应该是T的范围的类:
public <T extends Box & Renderable> void setBackBox(T bb)
如果Box和Renderable都是类,则它们不能都是T的类型边界。只有第一个类型绑定可以是一个类。
答案 1 :(得分:5)
在这里,您要定义两个类型参数:
Box
Box
T
是第二个方法范围的type-parameter的别名,如果你有另一个具有相同名称(class-scoped)的别名,那么方法范围的一个将隐藏它。这就是Eclipse抛出警告的原因。
如果您希望Renderable
扩展Box
和public <T extends Renderable & Box> void setBackBox(T bb)
,则必须执行以下操作:
Box
另请注意,当您的type-parameter(s)扩展多个类型时,您可以使用一个类,它必须是列表中的第一个。例如,如果public <T extends Box & Renderable> void setBackBox(T bb)
是一个类,则正确的定义是:
ID int,
Date Date,
Name varchar(max)