¿Cómo se vería Java si se rediseñara completamente con el conocimiento que tenemos hoy?

Probablemente tendría más azúcar sintáctica que la que tiene ahora, en la línea de Groovy. Cosas como println, sintaxis de cierre simplificada, concurrencia, etc. Java no estaba realmente diseñado para ser un lenguaje de script, por lo que carece de algunas de las características que tiene Groovy, como la capacidad de tomar bibliotecas de Internet en tiempo de ejecución.

La forma en que se diseñan las IU podría haberse pensado de manera diferente. Imagínese si tuviera la capacidad de escribir el código de la interfaz de usuario una vez, y simplemente implementarlo en diferentes tipos de contenedores haría que se procesara de manera diferente. Por ejemplo, el mismo fragmento de código de interfaz de usuario podría convertirse en una interfaz similar a GWT para la implementación web, o si lo está implementando en el escritorio, generaría una interfaz de usuario más nativa. La idea es que el kit de herramientas sea parte del contenedor, y el código de la interfaz de usuario simplemente invoque, lo que esté disponible.

Las características de modularidad probablemente se habrían incorporado desde el principio. Esto haría que el tiempo de ejecución sea más rápido de cargar.

Probablemente habría una mejor supervisión entre las API, por lo que no hay lista de clase / interfaz en java.util y java.awt. Y un poco más de reflexión acerca de cómo cosas como el marco de validación deberían haberse aplicado desde SE hacia abajo, en lugar de solo en EE. Esto habría hecho posible que se utilizara el mismo marco en aplicaciones de escritorio y empresariales.

Dicho esto, hay muchas características en Java 8 y 9, incluido un REPL, que hace que sea más fácil probar fragmentos de código y crear scripts. JavaFX es bastante estelar, puede diseñarlo con CSS e implementar el mismo código en todos los escritorios (Windows, Mac y Linux) además de implementarlo como una aplicación móvil.

Probablemente no muy diferente. He usado Java y hace un buen trabajo al permitirle, incluso alentarlo, a escribir de manera orientada a objetos. No puede obligarlo a hacerlo, siempre puede escribir todo su programa en la clase de nivel superior (el antipatrón llamado “clase de Dios”). Pero las herramientas están ahí si las usa.

Sospecho que los patrones de diseño más comunes se incorporarían al lenguaje de alguna manera. Abstract Factory, Factory method, Prototype, Resource Acquisition es initialization, Decorator, Facade, Proxy, Facade, etc.

Ah, y definitivamente tendría “widgets” más bonitos en sus paquetes de GUI. Los que vienen con el idioma son aún más feos que los de MFC.

El java que tenemos hoy es muy diferente del primer lanzamiento de Java 1 que salió en 1996. Java ha sufrido muchos cambios a lo largo de los años. El Proceso de la Comunidad Java se asegura de que se agreguen cosas buenas y de que las cosas no deseadas se dejen de usar y finalmente se eliminen.

Por lo tanto, han sido 30 años de evolución constante con experiencia de uso y comentarios de millones de usuarios que programan todo tipo de plataformas y soluciones.

Si alguien comenzara desde cero y lo rehiciera a su gusto, probablemente se arruinaría o se convertiría en un idioma totalmente diferente que a la gente le puede gustar o no.