2011-12-14 113 views
5

我定义一个类:Java泛型类型参数隐藏

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

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

编辑:

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

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

现在的问题是,如果我重新提名内IJ,我不知道该IJ实际上是同一类型。

+4

为我编译 - 是否有在你的代码中定义的其他类型的`I`? – 2011-12-14 22:30:50

+1

同样,对我没有警告。第三个是 – n1r3 2011-12-14 22:36:47

回答

9

不要让内部类参数:

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

作为内部(非静态嵌套)类,IBaz声明中定义仍将在Foo具有意义,因为每个Foo将隐含引用其外部Baz实例。

3

如果I在外部类中已定义只是使这种

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

无法在内部类重新定义I。内部类的I应该是外部类的I,如果这是你想要的,那么重命名它。

HTH