我有一个庞大的项目,这个类在这个项目的各个地方都被广泛使用。该类定义了toString()
方法,该方法输出了大量信息。我想定义另一个方法,比如toShortString()
,并用此方法调用替换调用原始toString()
的所有匹配项。
问题在于有很多代码如下所示:
log.debug("Order issued: " + order);
log.debug("Loaded list of orders: " + orders);
其中order
是此对象的实例,orders
是此类对象的列表。
有没有办法找到所有这些事件?
欢迎任何建议。 IDE是IntelliJ Idea,如果重要的话。
答案 0 :(得分:4)
而不是替换容易出错的toString()
的所有出现(你肯定会错过一些)而有些非常难以替换(例如,System.out.println()
List
Order
个对象始终仅调用toString()
我建议您修改toString()
本身以调用toShortString()
。
将toString()
内的所有代码移动到另一个名为toLongString()
的函数中,然后使用此函数,您需要对String
个Order
个对象进行详细的{{1}}表示。
答案 1 :(得分:3)
只需覆盖toString()
课程中的Order
方法正文。
从技术上讲,无法找到所有调用,因为即使是系统库也会在很多地方调用toString()
,就像所有类型的集合一样。此外,您应该注意您的模板(无论您使用什么GUI。)
因此,您希望记录短打印输出, debug 完整(原始)。两者都在呼叫toString()
。然后,您可以尝试查看调用堆栈跟踪内部以确定它的调用位置。使用Thread.currentThread().getStackTrace()
访问当前堆栈跟踪。
假设,如果最后10个stacktrace元素中的任何一个来自您Log
类,则会调用它进行日志记录,然后您可以打印短打印输出。否则请完整打印输出。
是的,最好将不同版本的toString()
移动到不同的方法中。
答案 2 :(得分:0)
我知道我有点晚了,但我在IDEA找到了合法的方式:
toString
方法标记为@Deprecated
。Analyze
- > Run inspection by name
- >选择Deprecated API usage
。中提琴!它将列出任何已弃用的API的所有用法(希望您不要这样做)当然包括您刚刚注释的toString
。别忘了删除注释。
P.S。不会显示隐式调用