2010-03-27 14 views
15

¿Es posible especificar restricciones de límite superior e inferior en los parámetros de tipo en Java?¿Es posible especificar restricciones de límite superior e inferior en los parámetros de tipo en Java?

Encontré a conversation in Sun's forum en el que se discutió este problema (aparentemente antes de que finalizara la función de genéricos), pero no hubo una respuesta definitiva.

En resumen, hay una sintaxis válida para hacer esto:

public class MyClass<T extends Number super Integer> 

?

Respuesta

11

No lo creo, por lo que puedo decir de las especificaciones del lenguaje, "super" solo es válido para los tipos de comodines en primer lugar. La sintaxis de comodines también sugiere que sólo puede tener un comodín obligado, también - por lo que no puede usar algo como esto ya sea:

// Invalid 
void foo(List<? extends Foo super Bar> list) 

A pesar de que ambos están bien:

// Valid 
void foo(List<? extends Foo> list) 

// Valid 
void foo(List<? super Bar> list) 

Como En comentarios, es posible tener múltiples límites superiores, pero solo para parámetros de tipo y expresiones de conversión. Por ejemplo:

// Valid 
<T extends Number & Comparable> void foo(List<T> list) 
+1

Gracias por su respuesta. ¿Puedo sugerir que agregue un comentario diciendo que el código no es válido, para que nadie piense (falsamente) que es válido? (Por ejemplo, si aparece en la página de resultados de un motor de búsqueda) –

+0

@Hosam: Lo haré. –

+0

Para ser claros, * puede * tener múltiples límites superiores, por ejemplo 'List '. – NateS

5

De Oracle's tutorial:

Nota: Puede especificar un límite superior para un comodín, o puede especificar un límite inferior, pero no se puede especificar tanto.

Cuestiones relacionadas