Java泛型类型参数隐藏

Java泛型类型参数隐藏,java,generics,warnings,Java,Generics,Warnings,我正在定义一个类: class Foo<I extends Bar & Comparable<I>> { } 现在的问题是,如果我将内部I重新指定为J,我不确定I和J实际上是相同的类型。如果I已经在外部类中定义了,就这样做 public class Outer<I extends Bar & Comparable<I>> { public class Foo<I> { } } 公共类外部{ 公开课Foo{

我正在定义一个类:

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

现在的问题是,如果我将内部
I
重新指定为
J
,我不确定
I
J
实际上是相同的类型。

如果
I
已经在外部类中定义了,就这样做

public class Outer<I extends Bar & Comparable<I>> {
  public class Foo<I> {
  } 
}
公共类外部{
公开课Foo{
} 
}
您不能在内部类中重新定义
I
。内部类的
I
将不是外部类的
I
,如果这是您想要的,那么将其重命名


HTH

不要将内部类参数化:

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

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

为我编译-在代码的其他地方是否定义了类型
I
,对我没有警告。是的,你说得对。这是一个内部类,外部类也使用I。如果我在
J
中重新指定
I
,那么我不能保证它们是相同的。或者?第二个
I
是第一个
I
。我接受这一点,因为这回答了我的问题。这可能看起来像一个老生常谈的问题,但我的问题不同,我后来发现了它。我的问题是,内部类实际上是一个内部接口。无法避免在内部接口中显式地声明类型,这会把实现内部接口的内部类的一切都搞砸。。。
class Baz<I extends Bar & Comparable<I>> {
   class Foo {
   }
}