我正在定义一个班级:
class Foo<I extends Bar & Comparable<I>> {
}
编译器抱怨I
隐藏了I
。我猜定定义中出现的第二次I
隐藏在第一个范围内,就好像变量I
可以分配给两种不同的类型一样。如何正确地做到这一点?
编辑:
这是一个内部阶级。完整的代码可以是:
class Baz<I> {
class Foo<I extends Bar & Comparable<I>> {
}
}
现在的问题是,如果我重新提名内部I
到J
,我不确定I
和J
实际上是同一类型。< / p>
答案 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