質問: javaインタフェースで静的メソッドを定義できないのはなぜですか? これがその例です。public interface ixmlizable<t> { static t newinstancefromxml(element e); element toxmlelement(); } もちろんこれはうまくいきません。しかしそうではないのですか?考えられる問題の1つは、あなたが電話をしたときに何が起こるかです。ixmlizable.newinstancefromxml(e); この場合、私はそれが単に空のメソッド(すなわち{})を呼ぶべきだと思います。すべてのサブクラスは静的メソッドを実装することを余儀なくされるので、静的メソッドを呼び出すときはすべてうまくいくでしょう。では、なぜこれが不可能なのでしょうか。 編集: 「それがjavaのやり方だから」より深い答えを探していると思います。静的メソッドを上書きできないという特別な技術的な理由はありますか?つまり、javaの設計者が、インスタンスメソッドをオーバーライド可能にし、静的メソッドを無効にすることを決めたのはなぜですか。 編集: 私のデザインの問題は私がコーディング規約を強制するためにインタフェースを使用しようとしているということです。つまり、インターフェースの目的は2つあります。 ixmlizableインターフェースを実装するクラスをxmlエレメントに変換できるようにしたい(多態性を使用しても正常に動作する)。 ixmlizableインターフェースを実装するクラスの新しいインスタンスを作成したい場合は、newinstancefromxml(element e)静的コンストラクターがあることを常に知っているでしょう。 これを確実にするために、単にインターフェースにコメントを入れる以外の方法はありますか? 編集: java 8以降、静的メソッドはインタフェースで使用できるようになりました。
回答: インターフェースはクラスが提供するもののリストを提供するだけであり、それらの実際の実装ではありません。これが静的アイテムです。静的が必要な場合は抽象クラスを使用して継承します。それ以外の場合は静的クラスを削除します。それが役立つことを願っています!