看看在isAnnotationPresent
类中找到的Method
方法,它所做的就是使用它的参数调用getDeclaredAnnotation
并检查它的无效性。
如果我使用isAnnotationPresent(...)
而不是getDeclaredAnnotation(...) != null
来验证是否存在注释,它是否会影响性能?
你应该总是使用你需要的方法,即isAnnotationPresent
。它的可读性显然更好,有时甚至可能更好。
不看代码,最简单的实现是什么?显然,测试getDeclaredAnnotation(...) != null
。那么你会失去什么?一种方法调用。方法调用成本很高,但无论何时重要,它们都会被内联,因此它们基本上是免费的。你不能输。
在这种情况下,你很可能也无法获胜,如果可以的话,只需要很难衡量数量。
但想象一下类似的收藏案例:isEmpty()
vs. size() == 0
。对于某些花哨的集合,后者可能成本更高,例如,一些有趣的链表或由数据库支持的集合。实际上,SELECT COUNT(*) ...
通常比IF EXISTS(...)
慢。
因此,请始终选择更简单/更易读的解决方案。性能方面它通常无关紧要,什么时候开始,你可能会获益。
唯一值得提前做的优化是关于算法的复杂性(例如,你肯定不想做冒泡排序)。