Java泛型类型参数隐藏

时间:2011-12-14 22:28:46

标签: java generics warnings

我正在定义一个班级:

class Foo<I extends Bar & Comparable<I>> {
}

编译器抱怨I隐藏了I。我猜定定义中出现的第二次I隐藏在第一个范围内,就好像变量I可以分配给两种不同的类型一样。如何正确地做到这一点?

编辑:

这是一个内部阶级。完整的代码可以是:

class Baz<I> {
    class Foo<I extends Bar & Comparable<I>> {
    }
}

现在的问题是,如果我重新提名内部IJ,我不确定IJ实际上是同一类型。< / p>

2 个答案:

答案 0 :(得分:9)

不要让内部类参数化:

class Baz<I extends Bar & Comparable<I>> {
   class Foo {
   }
}

作为内部(非静态嵌套)类,I声明中定义的Baz仍然具有Foo中的含义,因为每个Foo都有隐式引用其外部Baz实例。

答案 1 :(得分:3)

如果已经在外部类中定义了I,那么只需要这个

public class Outer<I extends Bar & Comparable<I>> {
  public class Foo<I> {
  } 
}

无法在内部课程中重新定义I 。内部类的I将不是外部类的I,如果这是你想要的,那么,重命名它。

HTH