通用参数'扩展'多个类

时间:2015-06-14 12:06:45

标签: java generics

我对泛型参数有疑问,这是我的代码:

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

如你所见,你可以给出参数bb一个扩展Box&amp;的对象。渲染。 但是eclipse给出了以下警告:'类型参数Box隐藏了类型Box'。

我该如何解决这个/解决它?

2 个答案:

答案 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扩展Boxpublic <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)