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.

Cómo crear correctamente un método que acepte una lista de objetos.

Hola, me gustaría crear un método que acepte una lista de objetos algo así:

public static String formatList(List<object> listToFormat, int indentationSize){
    String indentation = Stream.generate(() -> "\t").limit(indentationSize).collect(Collectors.joining());
    String newIndentedLine = "\n" + indentation;
    return newIndentedLine + listToFormat.stream()
            .map(Object::toString)
            .collect(Collectors.joining(newIndentedLine));
}

Pero cuando intento hacer algo como esto:

List<car> cars = new ArrayList<>();
...
Formater.formatList(cars);

No está permitido.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual no puedes pasar un List<car> al método formatList() es porque la firma del método espera un List<object>. En Java, los genéricos no son covariantes, lo que significa que List<car> no es un subtipo de List<object>. Una solución a esto es cambiar la firma del método formatList() para que acepte un List<?>, lo que significa que puede aceptar cualquier tipo de lista, como se muestra a continuación:

    public static String formatList(List<?> listToFormat, int indentationSize) {
        String indentation = Stream.generate(() -> "\t").limit(indentationSize).collect(Collectors.joining());
        String newIndentedLine = "\n" + indentation;
        return newIndentedLine + listToFormat.stream()
                .map(Object::toString)
                .collect(Collectors.joining(newIndentedLine));
    }
    

    Con este cambio, ahora puedes pasar cualquier tipo de List al método:

    java
    List<car> cars = new ArrayList<>();
    // ...
    Formatter.formatList(cars, 2); // pasa la lista y el tamaño de la indentación

Comments are closed.