17

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

4

1 回答 1

30

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

于 2012-08-27T22:44:24.037 回答