2017-12-18 9 views
-1

MethodクラスにあるisAnnotationPresentメソッドを見ると、それはそのパラメータを使用してヌルをチェックして、getDeclaredAnnotationを呼び出します。isAnnotationPresentとgetDeclaredAnnotation!= null

getDeclaredAnnotation(...) != nullの代わりにisAnnotationPresent(...)を使用してアノテーションが存在するかどうかを確認すると、パフォーマンスに影響しますか?

+0

あなたが気づくことは決してありません。あなたがしようとしていることを最もよく記述したメソッドを使います。この場合、 'isAnnotationPresent()'を呼び出すことです。私はdownvoted、あなたはあなた自身のためにこれをテストすることができたので、いくつか**研究**を行ったが、あなたは本当にすべきではない。 [時期尚早な最適化に注意してください](https://softwareengineering.stackexchange.com/q/80084/202153)。 – Andreas

答えて

0

必要な作業を行う方法(ここではisAnnotationPresent)を使用する必要があります。明らかに読みやすさの点で優れており、時にはスピードが向上する場合もあります。

コードを見ずに、最も単純な実装は何ですか?明らかに、getDeclaredAnnotation(...) != nullをテストします。だからあなたは何を失うことができますか? 1つのメソッド呼び出し。メソッド呼び出しにはコストがかかりますが、どこでも問題はありませんが、基本的には無料です。あなたは失うことはできません。

この場合、おそらくどちらかで勝つことはできません。可能であれば、わずかな量だけ計測することができます。

しかし、コレクションについても同様のケースを想像してください:isEmpty()size() == 0。後者は、いくつかのファンシーなコレクション、例えば、面白いリンクされたリストや、データベースに裏打ちされたコレクションの場合、はるかに高価になります。実際、SELECT COUNT(*) ...は、IF EXISTS(...)よりも通常遅いです。

だから、よりシンプルで読みやすいソリューションを常に探してください。パフォーマンス面ではそれは通常問題ではありません。

アルゴリズムの複雑さに関しては、先験的な価値がある唯一の最適化はありません(バブルソートをしたくないなど)。

関連する問題