Java静的メソッドはオブジェクトインスタンスなしでそれにアクセスするために作成されます。それは私には理にかなっています。しかし最近、私は奇妙なことに遭遇しました、Javaはそのオブジェクトインスタンスからもアクセスできます。これは私にはかなり奇妙に見えます。この機能がJavaによって提供される理由を知っている人はいますか?静的メソッドにインスタンスなしでアクセスできることを許可することの重要性は何ですか?
これの利点は、既存のコード(クラス以外)を変更せずにインスタンスメソッドを取得して静的メソッドに変換できるため、下位互換性を実現できることです。静的にすることができるユーティリティメソッドに何度も出くわしたので、これが便利だとわかりました。static
修飾子を追加するだけで続行できます。
意味的に同一です。コンパイラーは、あなたが何を意味するのか(つまり、クラスを介して静的メソッドにアクセスする)を理解するのに十分なほどスマートです。 IDEはマナーが悪いことを警告します:)
詳細についてはこの質問 を見てください。彼らが言うようにそれは誤解を招く可能性があり、それがIDEがあなたに警告を与える理由です。
仕様で許可されていますが、お勧めできません。さらに、EclipseのようなIDEは、オブジェクトインスタンスの静的メソッドへのアクセスを警告付きでマークします。
それは悪いことですが、それを禁止するやむを得ない理由もありません。
o.f();
したがって、f
のスコープ内でo
という名前のメソッドを見つける必要があります。静的なf
はもちろんo
のスコープにもあると主張できますが、実際にはf
はより大きなスコープ(o
のクラスに対して定義されています)