¿Qué mejora te gustaría ver en Java?

Aquí está mi respuesta a mi propia pregunta, pero me encantaría ver qué otras ideas hay:

Me encantaría un bloque implícito de “prueba” para inicializar. Digamos que desea crear un objeto PickyPicky cuyo constructor declara que arroja AlmostNeverHappensException. Entonces tienes que hacer algo como esto:

PickyPicky pp = nulo; // línea A

tratar {

pp = nuevo PickyPicky ();

} catch (AlmostNeverHappensException anhe) {

System.out.println (“Si ve este mensaje, le compraré el almuerzo”);

regreso; // línea B

}

pp.doSomeReallyCoolStuff (); // línea C

Debe inicializar pp en nulo en la línea A porque, de lo contrario, el compilador se queja de que no se puede inicializar pp en la línea C, aunque está bastante claro que si el constructor hubiera fallado, dejando pp sin inicializar, habría salido de este procedimiento en la línea B .

Y, por supuesto, no puede declarar pp dentro del bloque try porque entonces está fuera del alcance en la línea C. Ahora, podría hacer esto …

tratar {

PickyPicky pp = nuevo PickyPicky ();

pp.doSomeReallyCoolStuff (…);

} catch (AlmostNeverHappensException anhe) {

// etc …

}

Pero imagine que doSomeReallyCoolStuff () toma varios objetos como parámetros, cada uno de los cuales requiere su propia inicialización que podría generar su propia excepción altamente improbable. Si cada constructor necesita su propio bloque de prueba, pronto se encontrará anidado confusamente en los bloques de prueba antes de comenzar a hacer cualquier codificación real.

Mi visión para el intento implícito se vería así:

PickyPicky pp = new PickyPicky () // Línea D

catch (AlmostNeverHappensException anhe) {

// etc …

} // Línea E

pp.doSomeReallyCoolStuff ();

Tenga en cuenta que no hay punto y coma al final de la línea D; toda la declaración se extiende hasta la línea E. Es como si estuviera declarando, inicializando y entregando la posible excepción de una vez.

De esta forma, se ahorraría unas pocas líneas de código y anidaría mientras se aborda responsablemente la posibilidad de que la inicialización pueda fallar.

Motherf *** ing operador de navegación segura. Si es la versión C # con la navegación del subíndice, aún mejor.

Solo puede hacer tantas pirámides de verificación nula antes de ponerse rabioso.

En su lugar, obtuvimos la clase Opcional que no es una alternativa a las comprobaciones nulas y nunca tuvo la intención de ser una, a pesar de que muchos “tutoriales” recomendaron usarla.