2011-12-14 15 views
5

estoy definiendo una clase:Java parámetro de tipo genéricos ocultar

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

el compilador se queja de I siendo ocultada por I. Supongo que la segunda vez que aparece I en la definición se esconde en el alcance la primera, como si la variable I pudiera asignarse a dos tipos diferentes. ¿Cómo hacerlo correctamente?

Editar:

esto es una clase interna. el código completo puede ser:

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

ahora el problema es que si me re-nominar interior I a J, no estoy seguro de que I y J son en realidad los mismos tipos.

+4

Compila para mí - ¿hay un tipo 'I' definido en otro lugar de tu código? –

+1

Lo mismo, sin advertencia para mí. – n1r3

+1

tercero eso. Compila bien. – asenovm

Respuesta

9

no incurra en la clase interna con parámetros:

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

Como una clase interna (no estática anidada), I como se define en la declaración Baz todavía tendrá sentido en Foo, ya que cada Foo tendrá una referencia implícita a su instancia externa Baz.

+0

lo aceptaré ya que esto responde mi pregunta. podría parecer una pregunta banal pero mi problema era diferente y lo descubrí más tarde. Mi problema era que la clase interna era en realidad una interfaz interna. No se puede evitar el establecimiento explícito de tipos en la interfaz interna, y eso ensució todo para las clases internas que implementan las interfaces internas ... – marcorossi

3

Si I ya está definido en la clase externa simplemente hacen de este

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

Usted no puede redefinir I en su clase interna. El I de la clase interna sería algo más que el I de la clase externa, si esto es lo que quieres, bueno, renómbralo.

HTH

Cuestiones relacionadas