Java 8中的公共成员变量是特征还是实现副作用/缺陷?
这个问题与预发布的Java 8 build 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; }
}
Run Code Online (Sandbox Code Playgroud)
示例实现类型:
public class FooImpl implements Foo {
public int foo = 1;
}
Run Code Online (Sandbox Code Playgroud)
此代码遵循变量阴影的标准约定:
Foo f = new FooImpl();
System.out.println(f.foo());
System.out.println(f.foo);
System.out.println(new FooImpl().foo);
Run Code Online (Sandbox Code Playgroud)
输出:
0
0
1
Run Code Online (Sandbox Code Playgroud)
文档(JSR 335:用于Java™编程语言版本0.5.1的Lambda表达式)未提及成员变量.我倾向于认为编译器过于宽容,但也许我错过了一些东西.
Tim*_*imK 29
接口中的公共字段不是Java 8中的新功能.如果您记得它们是隐式静态和最终的,那么您看到的结果非常有意义.
| 归档时间: |
|
| 查看次数: |
12289 次 |
| 最近记录: |