Java 8 接口中的公共成员变量是特性还是实现的副作用/缺陷?
这个问题与预发布的 Java 8 版本lambda-8-b50-linux-x64-26_jul_2012.tar.gz 相关。
Java 8 以默认方法的形式为接口引入了新特性。使用 JDK8 lambda 编译器的随意测试允许这种形式的接口:
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 表达式)没有提及成员变量。我倾向于认为编译器过于宽容,但也许我错过了一些东西。