JAVA:获取计数,在其他类中调用一个类的次数

假设我有一个 demo.java 类和其他类,如 A.java 、 B. Java 等。

我想在 Demo.java 中编写一些代码来获取 count ,这将告诉 Demo.java 有多少类被调用。

任何建议都会有所帮助。提前致谢!


万千封印
浏览 347回答 3
3回答

浮云间

在类中创建一个静态变量。public static int callerCounter=0;.然后在每个构造函数中递增它。例如:-Demo(){callerCounter++; // Add this line in every Constructor}callerCounter并在您想要获得计数器值的地方打印。

慕莱坞森

创建一个静态 Set callerClasses 来保存调用 Demo 类的每个类的名称。然后,在每次调用 Demo 类时,将调用者姓名添加到集合中。在任何时候,您都可以通过检查 Set 大小来检查有多少不同的类调用了您的 Demo 类。编辑注释#1:在我发布我的答案后,这个问题就很清楚了,即意图不是计算方法调用而是计算创建的实例。无论如何我都会保留它,因为这可能是其他人的情况。编辑注#2:为完整性添加了代码示例。&nbsp; public class Demo {&nbsp; // ConcurrentSkipListSet for thread safety&nbsp; private static Set<String> callerCount = new ConcurrentSkipListSet<>();&nbsp; public void methodA() {&nbsp; &nbsp; String className = new Exception().getStackTrace()[1].getClassName();&nbsp; &nbsp; recordCaller(className);&nbsp; }&nbsp; public long getNumberOfCallers() {&nbsp; &nbsp; return callerCount.size();&nbsp; }&nbsp; private void recordCaller(final String className) {&nbsp; &nbsp; callerCount.add(className);&nbsp; }}

饮歌长啸

我认为在一般情况下仅通过分析代码是不可行的。如果接口正在使用中,知道在接口后面将实例化哪个类可能并非易事。这可能取决于某些工厂内的决定,并且可能会受到仅在运行时可用的输入的影响,甚至在理论上受 SecureRandom 的影响。您始终可以放置计数器或仅记录语句(单独处理日志输出)以在运行时收集此类统计信息。JProfiler 之类的工具可以作为无需编程的替代工具。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java