31

いくつかのレガシー コードに静的メソッドがあり、複数のクライアントから呼び出されます。明らかに、それをオーバーライドしたり、依存性注入によって動作を変更したりするオプションはありません。既存のクラスを変更することはできません。

私が今やりたいことは、リフレクションを使用して動作を変更することです (そのメソッド - 同じ署名と戻り値の型を使用)。

出来ますか ?そうでない場合、どの設計パターンでも私を救うことができますか?

ありがとう !

編集:何を変更/変更できるかについて混乱があります。既存のクラス/メソッドを変更することはできませんが、プロジェクトにクラスを追加することはできます。既存のクラスでできる最善のことは、それらに注釈を付けることです。これはすべて、既存のコードを壊さないようにするためです。これは、大きなプロジェクトの完全なテスト ラウンドを意味します。

編集 2: java.lang.Instrumentation は Android では利用できません。

4

2 に答える 2

25

method を持つInstrumentationクラスを見ることができると思いますredefineClasses(ClassDefintion classDefinition)

再定義により、メソッド本体、定数プール、および属性が変更される場合があります。再定義では、フィールドやメソッドの追加、削除、名前変更、メソッドのシグネチャの変更、または継承の変更を行ってはなりません。

お役に立てれば。

参考文献:Javadoc

于 2013-04-12T08:54:49.220 に答える