【问题标题】:Generic argument 'extends' multiple classes通用参数“扩展”多个类
【发布时间】:2015-06-14 12:06:44
【问题描述】:

我有一个关于泛型参数的问题,这是我的代码:

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

如您所见,您可以将扩展 Box 和 Renderable 的对象作为参数 bb。 但是eclipse给出了以下警告:'类型参数Box正在隐藏类型Box'。

我该如何解决/解决这个问题?

【问题讨论】:

    标签: java generics


    【解决方案1】:

    在这里,您定义了两个类型参数:

    • 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)
    

    【讨论】:

      【解决方案2】:

      在这里,您将 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 的类型边界。只有第一个类型边界可以是类。

      【讨论】:

        猜你喜欢
        • 2013-07-18
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多