Puede restringir los parámetros de tipo con un límite en Java. Por ejemplo:
interface Foo<T extends Bar> { // ... } Puede usar muchos tipos de tipos para el enlace, incluidas interfaces, clases, tipos parametrizados y parámetros de tipo. En otras palabras: Bar puede ser una interfaz, una clase, etc. (no puede ser un tipo primitivo o de matriz).
También puede usar clases final , enum y tipos de record como límites. Entonces, lo anterior todavía funciona cuando Bar es una clase, enum o record final .
Pero los tipos de enum y record son implícitamente final : no es posible crear un subtipo de enum o record . Esto implica que cuando utiliza una enum o record como límite de parámetro de tipo, la única posibilidad de completar el parámetro de tipo es con esa enum o record específico como argumento de tipo. Lo mismo ocurre con las clases final .
No tiene sentido tener un Foo<T> si T no puede ser otra cosa que el mismo Bar ; en ese caso, también podría omitir el parámetro de tipo de Foo por completo y usar Bar directamente.
¿Hay casos en los que tenga sentido que pueda usar una clase final , una enum o un tipo de record como un límite de parámetro de tipo?
¿Hay casos en los que tenga sentido que pueda usar una clase final, una enumeración o un tipo de registro como un límite de parámetro de tipo?
No.
Consulte las preguntas frecuentes de Angelika Langer, por ejemplo. No hay aplicaciones útiles de tales límites.
¿Por qué está permitido entonces?
¡Pasar!
Sin embargo, una posible explicación: mantiene el lenguaje más simple. Las restricciones adicionales requieren una verificación adicional, por lo tanto, un costo de implementación adicional.