Java 8(预发布)接口成员变量

Java 8中的公共成员变量是特征还是实现副作用/缺陷?

这个问题与预发布的Java 8 build lambda-8-b50-linux-x64-26_jul_2012.tar.gz有关 。

Java 8以默认方法的forms向接口引入了新function。 使用JDK8 lambda编译器进行临时测试允许使用以下forms的接口:

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

示例实现类型:

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

此代码遵循变量阴影的标准约定:

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

输出:

 0 0 1 

文档(JSR 335:用于Java™编程语言版本0.5.1的Lambda表达式)未提及成员变量。 我倾向于认为编译器过于宽容,但也许我错过了一些东西。

接口中的公共字段不是Java 8中的新function。如果您记得它们是隐式静态和最终的,那么您看到的结果非常有意义。