para descargar actualizar java interface multiple-inheritance java-8 diamond-problem

actualizar - java descargar



Métodos de extensión virtual en la próxima versión de Java 8 (5)

Creo que el concepto de "métodos de extensión" no es más que la última oportunidad para hackear / corregir API mal diseñadas que han estado expuestas al "mundo externo". Solo azúcar sintáctico.

Cuando veo fragmentos de código como

interface A { void a(); void b() default { System.out.println("b"); }; void c() final { System.out.println("c"); }; }

Tengo una pregunta. ¿Ya no tenemos suficiente sh * t en Java? ¿Por qué uno podría necesitar esto?


Está previsto que Java 8 contenga alguna forma de soporte lambda y de cierre, lo que sería un gran paso en la modernización del lenguaje Java. El problema es que las bibliotecas existentes basadas en interfaces, como el marco de recopilación, no podrán usar directamente estas nuevas características. No es posible agregar un método a una interfaz sin romper las implementaciones existentes, simplemente no volverían a compilar.

Tener lambdas, pero no ser capaz de usarlos fácilmente con colecciones estándar, sería una gran decepción para los desarrolladores de Java. Para integrar lambdas en las colecciones estándar, métodos como forEach , map o filter serían muy deseables.

La solución a este problema es agregar otra característica, los métodos de extensión, que definen una implementación predeterminada de un método en una interfaz. Las subclases existentes utilizarían el método predeterminado, pero también es posible anular el método con una mejor implementación especializada y posible.

Se puede encontrar más información sobre la propuesta del método de extensión en Java Enhancement Proposal 126 .


Esto es excelente porque le permite a usted, el escritor de la API, extender las interfaces post-hoc sin causar NoSuchMethodErrors. También proporciona implementaciones predeterminadas para los métodos en V2 para las clases compiladas en V1; el código funciona como un encanto. Esto también le permite anular la implementación predeterminada en las clases compiladas contra V2 como de costumbre, y hace que las interacciones numeradas sean redundantes. Lo considero también superior a los métodos de extensión del sitio de uso.


Necesitamos esto porque hará que los chicos de Scala estén absolutamente furiosos. Ya tienen una funcionalidad bastante similar en forma de ''rasgos'', por lo que ahora tendrán que hacer que funcionen junto con estos.

Orinarse fuera de los chicos de Scala es, literalmente, la más alta prioridad en el desarrollo del lenguaje Java.


Le sugiero que mire esta conferencia: http://medianetwork.oracle.com/media/show/16999

Esto explica todo. Lo más interesante es permitir que una interfaz evolucione sin reescribir toda la base de código. Esta es la clave para permitir que una gran base de código evolucione y no se vuelva cada vez más lisiada.