15
Java 8インターフェースのパブリック・メンバー変数は、フィーチャーかインプリメンテーションの副作用/欠陥ですか?Java 8(プレリリース版)のインターフェース・メンバー変数
この質問は、プレリリースJava 8ビルドlambda-8-b50-linux-x64-26_jul_2012.tar.gzに関連しています。
Java 8は、デフォルトメソッドの形式で新しい機能をインターフェイスに導入しています。
public interface Foo {
public int foo = 0;
int foo() default { return foo; }
}
サンプル実装タイプ:
Foo f = new FooImpl();
System.out.println(f.foo());
System.out.println(f.foo);
System.out.println(new FooImpl().foo);
出力:このコードは、変数シャドウイングのための標準的な規則に従う
public class FooImpl implements Foo {
public int foo = 1;
}
JDK8ラムダコンパイラでカジュアル試験は、この形式のインターフェースを可能にします。
0
0
1
ドキュメント(JSR 335:Java™プログラミング言語バージョン0.5.1のラムダ式)には、メンバ変数は記載されていません。私はコンパイラがあまりにも寛容だと思う傾向があるが、おそらく私は何かを逃した。
'Foo.foo = 0;'を試してください – oldrinb
+1 - そして、Java 8は、パブリックインターフェイスフィールドを非静的であるか、または非最終的なものに変更できないことを追加できます。さまざまな方法。 –
Doh!あなたは正しいです - 私はちょうど最後の静的な最終15年間宣言しています。ここにJLSの関連セクションがあります:[9.3。フィールド(定数)宣言](http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3)を参照してください。 – McDowell