查找toString()方法的所有用法

And*_*nov 10 java intellij-idea

我有一个庞大的项目,在这个项目的各个地方都广泛使用.该类定义了toString()输出大量信息的方法.我想定义另一个方法,toShortString()toString()用这个方法调用替换所有调用original的方法.

问题是有很多代码如下所示:

log.debug("Order issued: " + order);
log.debug("Loaded list of orders: " + orders);
Run Code Online (Sandbox Code Playgroud)

其中order是此对象的实例,orders是此类对象的列表.

有没有办法找到所有这些事件?

欢迎任何建议.IDE是IntelliJ Idea,如果重要的话.

Rav*_*yal 5

而不是替换所有出现次数的toString()这将是容易出错(你肯定会错过一些)和一些非常难以取代(例如System.out.println()ListOrder对象将始终调用toString()只),我建议你修改toString()自己打电话toShortString()

将里面的所有代码toString()移到另一个被调用的函数中toLongString(),然后在您觉得需要详细String表示Order对象的地方使用这个函数。


gab*_*sch 3

toString()只需重写类中的方法体即可Order

从技术上讲,不可能找到所有调用,因为即使系统库也会toString()在很多地方调用,就像所有类型的集合一样。另外你应该注意你的模板(无论你使用什么 GUI。)

因此,您想要记录简短的打印输出,并调试完整的(原始的)。两人都在打电话toString()。然后您可以尝试查看调用堆栈跟踪内部以确定它是从哪里调用的。用于Thread.currentThread().getStackTrace()访问当前堆栈跟踪。

比如说,如果最后 10 个堆栈跟踪元素中的任何一个来自您的Log类,则调用它进行日志记录,然后您可以打印简短的打印输出。否则进行完整的打印输出。

是的,将不同版本转移toString()到单独的方法中是一个很好的做法。