isAnnotationPresent vs getDeclaredAnnotation!= null

时间:2017-12-18 00:19:03

标签: java performance annotations

查看isAnnotationPresent类中的Method方法,它所做的就是使用它的参数调用getDeclaredAnnotation并检查它的无效性。

如果我使用isAnnotationPresent(...)代替getDeclaredAnnotation(...) != null来验证是否存在注释,是否会影响效果?

1 个答案:

答案 0 :(得分:0)

您应始终使用您所需要的方法,即isAnnotationPresent。它的可读性明显更好,速度有时可能更好。

不看代码,最简单的实现是什么?显然,测试getDeclaredAnnotation(...) != null。那么你会失去什么?一种方法调用。方法调用成本很高,但无论何时重要,它们都会被内联,因此它们基本上是免费的。你不能失去。

在这种情况下,你很可能也不会获胜,如果可以的话,它只能通过微小的难以衡量的金额。

但想象一下类似的集合案例:isEmpty()size() == 0。对于某些花哨的集合,后者可能成本更高,例如,一些有趣的链表或由数据库支持的集合。实际上,SELECT COUNT(*) ...通常比IF EXISTS(...)慢。

因此,请始终选择更简单/更易读的解决方案。在性能方面它通常并不重要,当它发生时,你可能会获益。

唯一值得提前做的优化是关于算法的复杂性(例如,你肯定不想进行冒泡排序)。