-2

次の問題があります。

SuperClass の静的メソッドを呼び出すエンジンがあります (これを SuperClass.StaticMethod と呼びます)。エンジンのコードにはアクセスできませんが、振り返ることはできます。

SuperClass をサブクラス化 (SubClass を生成) し、リフレクションによって SuperClass から継承されたプライベート フィールドを編集できました。この時点まではすべて問題ありません。

エンジンには、スーパークラスを含む多くのクラスの静的な最終インスタンスを持つクラス (定数と呼びましょう) がありますが、エンジンの一部ではないため、サブクラスは含まれません。

これで、SuperClass.StaticMethod はこれと同等の処理を行います。

public int StaticMethod(int i)
{
    if(i == 0)
        return Constants.SuperClassInstance.Field_1;
    else if(i == 1)
        return Constants.SuperClassInstance.Field_2;
}

SuperClass.Field_1 と SuperClass.Field_2 はどちらもプライベートです (静的ではなく、人々はそう思っていたので、質問を少し編集しています) が、静的メソッドは SuperClass のメンバーであるため、それらを表示できます。私が言ったように、リフレクションを介して継承されたサブクラスにこれらのフィールドの値を設定することができましたが、上記のように SupperClass.StaticMethod が機能する方法のため、影響はありません。

SuperClassInstance.Field_1 と Field_2 を変更することはできないと思います。そうしないと、SuperClass の動作がわずかに、しかし賢明に壊れてしまいます。

これを解決する方法はありますか?

4

1 に答える 1