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