Java 8インターフェースのパブリックメンバー変数は、機能または実装の副作用/欠陥ですか?
この質問は、プレリリースのJava8ビルドlambda-8-b50-linux-x64-26_jul_2012.tar.gzに関するものです。
Java 8では、デフォルトのメソッドの形式でインターフェースに新機能が導入されています。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:Java™プログラミング言語バージョン0.5.1のラムダ式)には、メンバー変数については記載されていません。コンパイラーの耐性が高すぎると思う傾向がありますが、何かを見逃している可能性があります。