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