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