Personalmente, me gustan mucho los inicializadores de instancias, los uso para asignar valores predeterminados a cosas como colecciones, así que al escribir constructores no tengo que recordar asignarles los mismos valores predeterminados cada vez. Me parece bastante elegante: evita molestos aparejos de NPE y evita el código duplicado. Un método privado no parece tan bueno porque a) no puede asignar valores a los campos finales, b) podría ejecutarse en otro lugar en el código yc) el método aún necesita ser llamado explícitamente al inicio de cada constructor.¿Se consideran los inicializadores de instancias un estilo incorrecto?
Sin embargo, la otra cara de la moneda con la que he hablado es que son confusas, algunas personas que leen el código pueden no entender lo que hacen o cuándo se llaman y pueden causar más problemas de los que resuelven.
¿Se debe fomentar o evitar el uso correcto de estos inicializadores? ¿O es un caso "cada uno para ellos"?
Ninguna función de idioma es "buena" o "mala" - todo tiene una situación en la que realmente brilla. Creo que una mejor pregunta es "¿en qué situaciones se deben evitar o usar los inicializadores de instancias?" – templatetypedef
Casi siempre quiere que los campos de los tipos de colección sean 'finales', lo que soluciona el problema de NPE para esos. –