web-dev-qa-db-ja.com

Javaの静的メソッドには、オブジェクトインスタンスを使用してアクセスできます

Java静的メソッドはオブジェクトインスタンスなしでそれにアクセスするために作成されます。それは私には理にかなっています。しかし最近、私は奇妙なことに遭遇しました、Javaはそのオブジェクトインスタンスからもアクセスできます。これは私にはかなり奇妙に見えます。この機能がJavaによって提供される理由を知っている人はいますか?静的メソッドにインスタンスなしでアクセスできることを許可することの重要性は何ですか?

26

これの利点は、既存のコード(クラス以外)を変更せずにインスタンスメソッドを取得して静的メソッドに変換できるため、下位互換性を実現できることです。静的にすることができるユーティリティメソッドに何度も出くわしたので、これが便利だとわかりました。static修飾子を追加するだけで続行できます。

19
Nate W.

意味的に同一です。コンパイラーは、あなたが何を意味するのか(つまり、クラスを介して静的メソッドにアクセスする)を理解するのに十分なほどスマートです。 IDEはマナーが悪いことを警告します:)

詳細についてはこの質問 を見てください。彼らが言うようにそれは誤解を招く可能性があり、それがIDEがあなたに警告を与える理由です。

8
Dr G

仕様で許可されていますが、お勧めできません。さらに、EclipseのようなIDEは、オブジェクトインスタンスの静的メソッドへのアクセスを警告付きでマークします。

3
lweller

それは悪いことですが、それを禁止するやむを得ない理由もありません。

o.f();

したがって、fのスコープ内でoという名前のメソッドを見つける必要があります。静的なfはもちろんoのスコープにもあると主張できますが、実際にはfはより大きなスコープ(oのクラスに対して定義されています)

1
irreputable