data - ¿Es posible especificar restricciones de límite superior e inferior en los parámetros de tipo en Java?
java data types (2)
Del tutorial de Oracle :
Nota: puede especificar un límite superior para un comodín, o puede especificar un límite inferior, pero no puede especificar ambos .
¿Es posible especificar restricciones de límite superior e inferior en los parámetros de tipo en Java?
Encontré una conversación en el foro de Sun en la que se discutió este tema (aparentemente antes de que se completara la característica de genéricos), pero no hubo una respuesta final.
En resumen, ¿hay una sintaxis válida para hacer esto:
public class MyClass<T extends Number super Integer>
?
No lo creo, por lo que puedo decir de la especificación del idioma, "super" solo es válido para los tipos de comodín en primer lugar. La sintaxis de los comodines también sugiere que solo puede tener un límite de comodines, por lo que tampoco puede usar algo como esto:
// 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 se señaló en los comentarios, es posible tener varios límites superiores , pero solo para los parámetros de tipo y las expresiones de conversión. Por ejemplo:
// Valid
<T extends Number & Comparable> void foo(List<T> list)