Переменные элемента интерфейса Java 8 (предварительный выпуск)

Являются ли переменные public members в Java 8 интерфейсом функции или побочного эффекта/дефекта реализации?

Этот вопрос относится к предварительно выпуску Java 8 build lambda-8-b50-linux-x64-26_jul_2012.tar.gz.

Java 8 представляет новые функции для интерфейсов в виде методов по умолчанию. Случайное тестирование с помощью компилятора Jambda JDK8 позволяет использовать интерфейсы этой формы:

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: Lambda Expressions для языка программирования Java ™ версии 0.5.1) не упоминаются переменные-члены. Я склонен думать, что компилятор слишком терпим, но, возможно, я что-то пропустил.

Ответы

Ответ 1

Публичные поля в интерфейсах не являются новыми функциями Java 8. Если вы помните, что они неявно статичны и окончательны, результаты, которые вы видите, имеют прекрасный смысл.