Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8(预发布)接口成员变量_Java_Java 8 - Fatal编程技术网

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

Java 8(预发布)接口成员变量,java,java-8,Java,Java 8,Java8接口中的公共成员变量是特性还是实现的副作用/缺陷 这个问题与预发布的Java8版本有关 Java8以默认方法的形式向接口引入了新特性。使用JDK8 lambda编译器进行的偶然测试允许使用以下形式的接口: public interface Foo { public int foo = 0; int foo() default { return foo; } } 示例实现类型: public class FooImpl implements Foo { public int

Java8接口中的公共成员变量是特性还是实现的副作用/缺陷

这个问题与预发布的Java8版本有关

Java8以默认方法的形式向接口引入了新特性。使用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

文档(JSR335:Java的Lambda表达式™ 编程语言版本0.5.1)没有提到成员变量。我倾向于认为编译器过于宽容,但也许我遗漏了一些东西。

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

+1-我们可以补充一点,Java 8无法将公共接口字段更改为非静态和/或非最终字段,而不以各种方式破坏大量现有代码。Doh!你是对的,在过去的15年里,我一直在宣布他们是静态决赛。以下是JLS的相关部分:。