[解決済み] なぜJavaは内部クラスでの静的フィールドを禁止しているのですか?
2023-04-04 22:41:09
疑問点
class OuterClass {
class InnerClass {
static int i = 100; // compile error
static void f() { } // compile error
}
}
静的フィールドにアクセスすることはできませんが
OuterClass.InnerClass.i
でアクセスすることはできませんが、例えばInnerClassオブジェクトの生成数など、静的であるべきものを記録したい場合、そのフィールドを静的にすることができれば便利です。そこで
なぜ
は内部クラスでの静的フィールド/メソッドを禁止しているのでしょうか?
EDIT: 静的ネストされたクラス(または静的インナークラス)でコンパイラを幸せにする方法は知っていますが、私が知りたいのは、なぜJavaは言語設計と実装の両方の側面からインナークラス(または通常のインナークラス)内の静的フィールド/メソッドを禁止しているのか、誰かがそれについてもっと知っているならばです。
どのように解決するのですか?
内部クラスの背後にある考え方は、包含するインスタンスのコンテキストで操作することです。静的変数とメソッドを許可することは、どういうわけかこの動機と矛盾するのでしょうか?
8.1.2 内部クラスと包含するインスタンス
内部クラスは、明示的または暗黙的に静的宣言されていないネストされたクラスです。内部クラスは、静的イニシャライザ (§8.7) やメンバインタフェースを宣言してはいけません。内部クラスは、コンパイル時定数フィールド (15.28節) でない限り、静的メンバを宣言してはいけません。
関連
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] Javaにおける静的クラス
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
NullPointerException - java.lang.
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Javaでよくある構文エラー
-
シェルコマンドやスクリプトのJavaコール
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
eclipse にリソースリーク:'in' が閉じない
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み] なぜ、(非)静的なインナークラスで静的なメソッドを持つことができないのでしょうか(Java 16以前)?