[解決済み】なぜJavaでは静的なネストされたインターフェースが使われるのでしょうか?
2022-04-04 20:55:53
質問
私たちのコードベースで静的なネストされたインターフェイスを見つけました。
class Foo {
public static interface Bar {
/* snip */
}
/* snip */
}
今まで見たことがない。元の開発者が手の届かないところにいる。そのため、SOにお願いすることになりました。
静的なインターフェースのセマンティクスとは何でしょうか?を削除すると何が変わるのでしょうか?
static
? なぜこのようなことをするのでしょうか?
解決方法は?
上記の例のstaticキーワードは冗長であり(ネストされたインターフェースは自動的に"static")、削除してもセマンティクスに影響を与えません。同じことが、インターフェイスメソッドの "public" やインターフェイスフィールドの "public final" にも当てはまり、これらの修飾子は冗長で、ソースコードに混乱をもたらすだけです。
いずれにせよ、開発者は単にFoo.Barという名前のインターフェイスを宣言しているに過ぎないのです。FooにアクセスできないコードがFoo.Barにもアクセスできないことを除けば、包含するクラスとの関連付けはこれ以上ありません。(ソースコードから - Fooがpackage-privateであっても、バイトコードやリフレクションはFoo.Barにアクセスできます!)
外側のクラスからだけ使われることを想定しているのであれば、この方法でネストしたインターフェイスを作成し、新しいトップレベル名を作成しないようにすることは、許容されるスタイルです。例えば
public class Foo {
public interface Bar {
void callback();
}
public static void registerCallback(Bar bar) {...}
}
// ...elsewhere...
Foo.registerCallback(new Foo.Bar() {
public void callback() {...}
});
関連
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Javaにおける静的クラス
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み] なぜJavaは静的メソッドのオーバーライドを認めないのですか?
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み] なぜJavaのmainメソッドは静的なのですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] x--やx++はここで何をするのですか?