Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
Definición genérica duplicada de Java

Estoy tratando de implementar una clase básica para crear, leer, actualizar y eliminar objetos. Estoy seguro de que podría encontrar una biblioteca para hacer eso, pero lo estoy haciendo yo mismo con fines educativos.

Así que hice que todo lo que se guarda son entidades y tienen un identificador de un tipo específico:

 interface Entity<T extends Serializable> extends Serializable { T getIdentifier(); }

Las entidades son serializables y su identificador también. Luego, tengo mi EntityPersistor que se supone que debe guardar la entidad de su contenido (usando serialización) y nombrarlos de su clave. Mi única implementación de este persistente por ahora es guardarlos en el disco. Está utilizando el identificador como el nombre del archivo para guardarlo.

Aquí está mi entidad persistente:

 interface EntityPersistor<K extends Serializable, T extends Entity<K>> extends Iterable<T> { void save(T entity); void delete(T entity); void deleteById(K id); T getById(K id); boolean contains(K id); List<T> loadAll(); }

Entonces, el problema es que tengo que redefinir el tipo de clave dos veces cuando quiero usarla. Me gustaría escribir:

 interface EntityPersistor<T extends Entity<K extends Serializable>> extends Iterable<T>

pero arroja un error del compilador. Así que tengo que usarlo de esa manera:

 EntityPersistor<String, Product> persistor = new FileEntityPersistor<>();

lo cual es inconveniente.

¿Hay una solución alternativa o una mejor manera de hacerlo? Siento que hará que mi declaración sea menos legible, pero el uso es más importante.

EDITAR:

Olvidé mencionar que la class Product implements Entity<String>

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Normalmente, habría una forma de eliminar uno u otro, pero el problema es que está utilizando tanto K como T como tipos de parámetros.

No hay forma de decirle al compilador que el parámetro de un método debe ser el tipo genérico "interno" del objeto T (La Entity ). Por lo tanto, necesita dos genéricos:

Uno para referirse al tipo genérico "interior" de la Entity ( K )

Y uno para la propia entidad: Entity<K> ( T )

Debido al borrado de tipo, Java no podría descifrar el tipo de parámetro K en tiempo de ejecución sin su declaración.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda