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

2022-09-03 00:40:51

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; }
}

示例实现类型:

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 表达式)没有提到成员变量。我倾向于认为编译器太宽容了,但也许我错过了一些东西。


答案 1

接口中的公共字段不是 Java 8 中的新功能。如果你记得它们是隐含的静态和最终的,那么你看到的结果是完全有意义的。


答案 2

推荐