17

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のラムダ式)には、メンバー変数については記載されていません。コンパイラーの耐性が高すぎると思う傾向がありますが、何かを見逃している可能性があります。

4

1 に答える 1

30

インターフェイスのパブリック フィールドは、Java 8 の新機能ではありません。それらが暗黙的に静的で最終的なものであることを覚えていれば、表示される結果は完全に理にかなっています。

于 2012-08-27T22:44:24.037 に答える