私は抽象クラスAを持っています
Aを拡張する約10のクラスがあります
クラス A には 1 つまたは 2 つの静的メソッドがあり、これらはインスタンスではなく 10 個のクラスに属しているため、これらが静的であることは理にかなっています。たとえば、1 つの静的メソッドは getAllFromX と呼ばれ、クラスのすべてのインスタンスを X から取得します。それが何であれ、それはサーバーである可能性があります。したがって、これらのメソッドは静的であり、インスタンスにバインドされていないことがわかります。
クラス A に非静的抽象メソッドがあると同時に、各サブクラスはこのメソッドをオーバーライドします (文字列を返すだけです)。静的メソッドはオーバーライドできないため、静的にすることはできません (...)。
要約すると、抽象クラス A には静的メソッドと抽象非静的メソッドがあり、サブクラスによってオーバーライドされます。オーバーライドする必要があるため、2 番目のメソッドを静的にすることはできません。一方、最初のメソッドを非静的にすることもできますが、それは非常に見苦しく悪いプログラミング スタイルになるため、そのままにしておきます。
キャッチ?クラス A の静的メソッドは、非静的メソッドが返す値を取得する必要があります (もちろん、静的メソッドが継承されるサブクラスの場合)。
これを行うためにリフレクションを使用する「最も簡単な」方法はありますか? つまり…本当ですか?
たとえば、静的メソッドがあるクラスを取得します。
Class<?> cl=new Object(){}.getClass().getEnclosingClass(); (a hack I found here, thank god...)
次に、getConstructor を使用して、このサブクラスのオブジェクトを構築します。
次に、このオブジェクトを使用して非静的メソッドを呼び出します。
本当??もっと簡単にできませんか?つまり、プログラムを概念的に正しく設計したい場合...
C#から来て、私はそれが好きではありません(そして型消去のこと)。それはただ醜いです。実行可能ですが、醜いです。そして、少なくとも初心者にとっては大きな障害となります。編集: もう一度読んだ後、次を追加します: /rant end. 申し訳ありませんが、私は実際に気にします。