DEV Community

Elías Canales
Elías Canales

Posted on

Siempre sobrescribe toString()

Salvo que estes usando una clase de tipo record, necesitaras sobrescribir el toString() para que tenga sentido cuando estes debugeando o un test te falle y lo que veas en pantalla sea:

Expected :User@6c3f5566
Actual :User@12405818
Enter fullscreen mode Exit fullscreen mode

La utilidad es 0, obviamente siempre que puedas utilizar clases inmutables record sera mucho mejor, pero si necesitas crear clases, en ese caso sobrescribe directamente el toString().

Lo normal es que todos los atributos del equals() esten en el toString(), el único caso en el cual, algún atributo podría no estar completo en el toString(), es cuando quieres enmascarar o ocultar, algún dato. Pero en ese caso también habría que valorar si tiene sentido tener ese dato y de esa forma en el equals().

Los atributos que salen en el equals() deberían ser accesibles por los desarrolladores, porque si quisieran sobrescribir el toString() o mostrarlo de otra forma tendrían que extraer la información del toString() lo que es propenso a cometer errores.

Este método puedes generarlo de forma automática, por ejemplo, usando Lombok, o bien usando ReflectionToStringBuilder ambos te permiten excluir atributos.

Si quisieras enmascarar atributos, creo que la mejor opción es crear una clase especifica para ese atributo y sobrescribir su toString().

public record Prueba(int a, Account num) {}

public record Account(String num) {

    @Override
    public String toString() {
        return mask(num);
    }
}
Enter fullscreen mode Exit fullscreen mode

Referencias

Top comments (0)