Wildcard Lower Bound

📘 Java Generics Avanzado: <? super Y> explicado

🧠 Contexto

Firma original:

<Y extends Comparable<? super Y>> Predicate greaterThan(Expression<? extends Y> var1, Y var2);

🔍 Parte clave

Comparable<? super Y>

👉 Esto significa:

“Y debe poder compararse con Y o con cualquiera de sus supertipos


🧱 ¿Qué significa ? super Y?

Es un wildcard con límite inferior (lower bound).

? super Y

👉 Se traduce como:

“algún tipo que es Y o un supertipo de Y”


📊 Ejemplo simple

class Animal {}
class Perro extends Animal {}

Entonces:

Comparable<? super Perro>

👉 puede ser:

  • Comparable
  • Comparable
  • Comparable

    🚫 Pero NO sería válido

    • Comparable ❌ (no es supertipo)
    • Comparable

    🧠 ¿Por qué existe esto?

    Para permitir flexibilidad en comparaciones

    Ejemplo real:

    class Animal implements Comparable<Animal> {
        public int compareTo(Animal o) {
            return 0;
        }
    }
    class Perro extends Animal {}

    👉 Perro NO implementa Comparable, pero:

    ✔️ Sí es Comparable

    Gracias a <? super Y> esto sigue siendo válido.


    🔥 Caso práctico sin super

    Si fuera:

    <Y extends Comparable<Y>>

    👉 Entonces:

    • Perro ❌ (porque no implementa Comparable)
    • Animal ✅

    👉 Sería mucho más restrictivo.


    🧠 Regla mental clave

    ? extends T → leer
    ? super T   → escribir / consumir

    🧪 Ejemplo con listas

    List<? super Perro> lista;

    Puedes hacer:

    lista.add(new Perro()); // ✅
    lista.add(new Bulldog()); // ✅ si extiende Perro

    Pero al leer:

    Object obj = lista.get(0); // ⚠️ solo Object

    🎯 Aplicado a Criteria API

    <Y extends Comparable<? super Y>>

    👉 Garantiza que:

    • Y puede compararse consigo mismo
    • O con un tipo más general
    • Y el código sigue siendo seguro

    🚀 Resumen final

    • ? super Y → acepta supertipos
    • Aporta flexibilidad
    • Evita restricciones innecesarias
    • Es clave en APIs genéricas avanzadas

    🧠 Frase para recordar

    super abre hacia arriba en la jerarquía de tipos”


    En esta página