2016-03-31 5 views
1

jarファイルからクラスのメソッド[print]を使用しています。これはログの印刷に使用されます。今私はログフレームワークを適用し、すべてのファイルをプロジェクトログを印刷するためのjarファイルメソッドを使用する必要があります。すべてのファイルを変更せずに実行する方法はありますか? jarファイルクラスも変更できません。前もって感謝します。既存のコードに最小限の変更でログフレームワークを適用する

+1

だから、何か他の方法(プリント)でそれを変更せずにやりたいのですか?はいの場合、あなたは影をつけることができますが、それは悪いデザインです –

答えて

1

あなたが変更することはできませんのjarファイルであるclass Xを持っていると仮定すると、その印刷方法がでXをサブクラス化、staticあるので、あなたは、すべてのコードの上に

X.print("something"); 

の束を持っていますそれをオーバーライドしようとしても、何も得られません(静的呼び出しは継承を使用しません;少なくともJavaでは)。これらの呼び出しをすべて検索して、選択したログ方法で置き換える必要があります。

ただし、次にあなたがY S(特にprintの用途のために検索する必要はありません)との事で、すべてのX Sを置き換えることができます

public class Y extends X { 
    // ADD constructors calling super(constructorArgs) here 
    public static void print(String s) { 
     // ADD use of logging framework here 
    } 
    // ADD all other static methods: call X.methodName(methodArgs); 
    // all other dynamic methods: inheritance does it for you 
} 

を持つからの利益は、正常に動作する必要がありますすることができます。

場合は、代わりに、あなたは

X x = new X(/* args here */); 
// ... and lots of these 
x.print("something"); 

を持っているこの方法は、静的ではなく、new Yでフォームnew Xのすべての呼び出しを交換しても問題を解決するだろう。あなたは多くのファイルを変更するでしょうが、それぞれに最小限の変更を加えました。 Yクラスで変更されるのは、printは、もはやstaticではないということです。

関連する問題