メソッドの署名は、一度入力すると簡単に印刷できますか?Javaは、使用されているメソッドを印刷します
私の現在の単純な解決策は、名前を印刷するすべてのメソッドの前にSystem.out.print("method signature")
ステートメントを追加することですが、その後、すべてのゲッターとセッターについても非常に面倒です。
メソッドの署名は、一度入力すると簡単に印刷できますか?Javaは、使用されているメソッドを印刷します
私の現在の単純な解決策は、名前を印刷するすべてのメソッドの前にSystem.out.print("method signature")
ステートメントを追加することですが、その後、すべてのゲッターとセッターについても非常に面倒です。
このライブラリhttps://github.com/JakeWharton/hugo はほしいと思っています。
これはアンドロイド用ですが、それを構築していない場合は、必要に応じて簡単に変更できます。ちょうどそれらが含ま置き換えるアンドロイドの依存関係を削除するには :
import android.os.Build;
import android.os.Looper;
import android.os.Trace;
import android.util.Log;
と
をandroid.util.Log
は、だけではなく、あなたのログを置く使用されています。
hereは、それが特定のポイントにログを配置するためにAspectJのhttps://eclipse.org/aspectj/
を使用する唯一のexample
を持つJava用の高速テストです。
側面の使用は、例えば、非常に清楚です:
@Aspect
public class Hugo {
@Pointcut("execution(@hugo.weaving.DebugLog * *(..))")
public void method() {}
@Pointcut("execution(@hugo.weaving.DebugLog *.new(..))")
public void constructor() {}
はログが注入されるポイントカットを定義します。この例では、
@Around("method() || constructor()")
public Object logAndExecute(ProceedingJoinPoint joinPoint) throws Throwable {
enterMethod(joinPoint);
long startNanos = System.nanoTime();
Object result = joinPoint.proceed();
long stopNanos = System.nanoTime();
long lengthMillis = TimeUnit.NANOSECONDS.toMillis(stopNanos - startNanos);
exitMethod(joinPoint, result, lengthMillis);
return result;
}
その後hugo.weaving.DebugLog
@注釈を持つメソッドとコンストラクタを探し、私たちはものとどのようなログに記録するログをする方法を定義します。 'enterMethod'では、メソッドの署名を 'exitMethod'に記録し、結果とこのメソッドで費やした時間を記録できます。
非常にシンプルでクリーンで、アスペクトJの意図と同じくらい強力です。
:)私は今信じています。いくつかの情報を追加してください... – djodjo
あなた自身にこれを尋ねるべきです:リンクがダウンしてもう利用できなくなったとき、私の答えにはどうなりますか?ライブラリをリンクして使用方法を説明しましたが、あなたの答えはまだ廃止されています。だから代わりに、そのライブラリがOPの質問を解決する方法を説明して、どのようにして目的のメソッド名を出力するのかを説明する必要があります。ソースコード全体を投稿する必要はありませんが(これは著作権を侵害する可能性もあります)、最も重要な行の小さな抽出はOKです(特に、ソースライブラリをリンクして名前を付けたので)。 – Tom
カスタムアノテーションを作成することもできますが、必ずしもそうする必要はありません。パフォーマンスへの影響はかなり重要です。 –
これを行うにはいくつかの方法があります。この回答を確認してください:http://stackoverflow.com/questions/442747/getting-the-name-of-the-current-executing-method – kevingreen
私はあなたが何をやっているのか分かりませんが、私はあなたが実際に欲しいと思っています代わりに、デバッガ、プロファイラ、またはロギングライブラリを使用します。 –