【发布时间】:2015-06-14 12:06:44
【问题描述】:
我有一个关于泛型参数的问题,这是我的代码:
public <T extends Renderable, Box> void setBackBox(T bb) {
...
}
如您所见,您可以将扩展 Box 和 Renderable 的对象作为参数 bb。 但是eclipse给出了以下警告:'类型参数Box正在隐藏类型Box'。
我该如何解决/解决这个问题?
【问题讨论】:
我有一个关于泛型参数的问题,这是我的代码:
public <T extends Renderable, Box> void setBackBox(T bb) {
...
}
如您所见,您可以将扩展 Box 和 Renderable 的对象作为参数 bb。 但是eclipse给出了以下警告:'类型参数Box正在隐藏类型Box'。
我该如何解决/解决这个问题?
【问题讨论】:
在这里,您定义了两个类型参数:
T extends RenderableBox
Box 是第二个方法范围类型参数的别名,如果您有另一个同名(类范围),则方法范围的类型参数将隐藏它。这就是 Eclipse 抛出警告的原因。
如果你想让T 扩展Renderable 和Box,你必须这样做:
public <T extends Renderable & Box> void setBackBox(T bb)
另请注意,当您的类型参数扩展多种类型时,您可以使用一个类,该类必须位于列表的首位。例如,如果Box 是一个类,那么正确的定义应该是:
public <T extends Box & Renderable> void setBackBox(T bb)
【讨论】:
在这里,您将 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 的类型边界。只有第一个类型边界可以是类。
【讨论】: