Java 8接口中的公共成员变量是功能还是实现副作用/缺陷?
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表达式)不提及成员变量.我倾向于认为编译器太宽容了,但也许我错过了一些.