java java-8

Variables de miembro de la interfaz de Java 8(versión preliminar)



java-8 (1)

¿Las variables de miembros públicos en las interfaces de Java 8 son una característica o un efecto secundario / defecto de implementación?

Esta pregunta pertenece a la versión preliminar de Java 8 build lambda-8-b50-linux-x64-26_jul_2012.tar.gz .

Java 8 introduce nuevas características a las interfaces en forma de métodos predeterminados. Las pruebas ocasionales con el compilador lambda JDK8 permiten interfaces de esta forma:

public interface Foo { public int foo = 0; int foo() default { return foo; } }

Ejemplo de implementación de tipo:

public class FooImpl implements Foo { public int foo = 1; }

Este código sigue las convenciones estándar para el sombreado variable:

Foo f = new FooImpl(); System.out.println(f.foo()); System.out.println(f.foo); System.out.println(new FooImpl().foo);

Salida:

0 0 1

La documentación (JSR 335: Lambda Expressions para el lenguaje de programación Java ™ versión 0.5.1) no menciona las variables de los miembros. Me inclino a pensar que el compilador es demasiado tolerante, pero tal vez me haya perdido algo.


Los campos públicos en las interfaces no son una característica nueva en Java 8. Si recuerda que son implícitamente estáticos y finales, los resultados que está viendo tienen mucho sentido.