es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java Generics: ¿Cuál es el beneficio de utilizar comodines aquí?

El método fill de la clase Collections tiene el siguiente encabezado:

public static <t> void fill(List<? super T> list, T obj)

¿Por qué es necesario el comodín? El siguiente encabezado parece funcionar igual de bien:

public static <t> void fill(List<t> list, T obj)

No puedo ver una razón por la cual se necesite el comodín. El código como el siguiente funciona tanto con el segundo encabezado como con el primero:

List<number> nums = new ArrayList<>();
Integer i = 43;
fill(nums, i); //fill method written using second header

Mi pregunta es: ¿Para qué llamada específica de fill funcionaría el primer encabezado pero no el segundo? Y si no existe tal llamada, ¿por qué incluir el comodín? En este caso, el comodín no hace que el método sea más conciso ni mejora la legibilidad (en mi opinión).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El comodín es necesario en el primer encabezado del método fill porque permite que la lista sea de una superclase de T. Esto significa que la lista podría ser un List<object>, un List<number>, o un List<integer>, entre otros. Esto es útil porque permite que el método fill sea llamado con una lista de cualquier tipo que sea una superclase de T, no solo un List<t>. Por lo tanto, por ejemplo, la siguiente llamada funcionaría con el primer encabezado pero no con el segundo:

    List<object> objs = new ArrayList<>();
    String s = "¡Hola!";
    fill(objs, s); //error de compilación con el segundo encabezado ya que objs no es un List<string>
    

    Si se usara en cambio el segundo encabezado, la llamada anterior no se compilaría correctamente porque objs no es un List<string>. En general, el comodín permite más flexibilidad con los tipos de listas que se pueden pasar al método fill.

    Sin embargo, estoy de acuerdo en que en muchos casos el comodín puede no ser estrictamente necesario y se podría usar en su lugar el segundo encabezado sin problemas. En última instancia, depende de los requisitos del caso de uso específico para el método fill.

Comments are closed.