2008-09-25 6 views
11

¿Hay alguna manera de definir una restricción genérica en Java que sería análoga a la siguiente restricción genérica C#?Doble restricción genérica en la clase en Java: extends ConcreteClass & I

class Class1<I,T> where I : Interface1, Class2 : I 

Estoy tratando de hacerlo de esta manera:

class Class1<I extends Interface1, T extends I & Class2> 

Pero el compilador se queja de la parte de "Clase 2": parámetro Type no puede ser seguido por otros límites.

+0

'extands'? ¿Querías decir 'extends'? - también la línea C# no pone ninguna restricción en el tipo T, quizás cometiste un error? – BrainSlugs83

+0

Esto es un error tipográfico y esto es Java. – axk

Respuesta

4

La forma más sencilla que puedo ver de resolver el código Java es hacer Clase2 una interfaz.

No puede restringir un parámetro de tipo para extender más de una clase o parámetro de tipo. Además, no puedes usar super aquí.

5

Este código se compila bien aquí:

interface Interface1 {} 

class Class2 {} 

class Class1<I extends Interface1, T extends Class2 & Interface1> {} 

¿Por qué necesita el que escribo allí cuando usted asume solamente Interface1 de todos modos? (No se sabe nada más en su clase sobre I que se extiende Interface1)

+3

El punto es que "T extiende Class2 & I" no "T extiende Class2 & Interface1" cuando especifica clases concretas para ambos parámetros – axk

Cuestiones relacionadas