Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java findbugs能否检测未使用的公共方法_Java_Findbugs_Public Method - Fatal编程技术网

Java findbugs能否检测未使用的公共方法

Java findbugs能否检测未使用的公共方法,java,findbugs,public-method,Java,Findbugs,Public Method,是否可以使用FindBugs检测源树中未使用的方法?我在SO上看到一些帖子,其中用户声称这样做,一些人询问如何在FB中这样做,还有一些人声称FB不能这样做 有人知道这是怎么做到的吗?我只对没有从别处显式调用的方法感兴趣,我不关心反射 我认为Findbugs很有可能报告公共方法,而这些方法的使用方式与报告私有方法不同(要么是那样,要么我想到的是编译器标志:-) 真正的问题是,你为什么也想要?如果您正在编写一个已关闭且永远不会扩展的程序,那么查找未使用的方法将为您提供删除它们的机会。但是,如果你正在

是否可以使用FindBugs检测源树中未使用的方法?我在SO上看到一些帖子,其中用户声称这样做,一些人询问如何在FB中这样做,还有一些人声称FB不能这样做


有人知道这是怎么做到的吗?我只对没有从别处显式调用的方法感兴趣,我不关心反射

我认为Findbugs很有可能报告公共方法,而这些方法的使用方式与报告私有方法不同(要么是那样,要么我想到的是编译器标志:-)

真正的问题是,你为什么也想要?如果您正在编写一个已关闭且永远不会扩展的程序,那么查找未使用的方法将为您提供删除它们的机会。但是,如果你正在编写一个API,你无法预测谁会需要这些方法,因此报告这些方法没有多大意义。

对于我来说,为未使用的方法寻找候选方法的最佳方法是使用覆盖工具,如emma

为应用程序插入工具,过度使用它并检查emma日志-会话期间未使用的方法可能未使用,您可以使用您喜爱的IDE(eclipse…)检查未访问的方法调用层次结构

我怀疑,发现bug或任何其他代码分析器是否真的能检测到未使用的方法,因为方法可能是

  • 由其他库调用(对于所有非私有方法)
  • 远程呼叫
  • 通过反射API调用(甚至私有方法,从技术上讲)
好吧,到目前为止,它似乎没有捕获未使用的方法

当我在这个小样本上运行findbugs时:

public class TestJava
{
 int j;
 public static void main(String[] args)
 { 
   System.out.println("Nothing.");
 }
 public void foo()
 {
 }
 public static void bar()
 {
 }
}
它并没有发现foo和bar都没有被使用。它发现TestJava.j是一个未使用的字段

Unused field
This field is never used.  Consider removing it from the class.

findbugs还远远不够完美,但它仍然是一个非常有用的工具。

好吧,既然你想走这条路,尽管其他人发出警告:),你可以复制和修改它来做你需要的事情

为FindBugs编写检测器非常简单(特别是当您有了一个很好的起点时)。阅读入门

删除未使用的代码(包括未使用的公共方法)是一件事。问题是,您不能仅仅通过查看包含公共方法的类来判断是否使用了该方法。您需要查看将要运行的整个系统,因为可能会从任何地方调用公共方法


对整个系统(即,您的代码和用于运行系统的所有库)运行模糊处理程序有助于找到从未调用过的公共方法(注意:反射当然会影响结果!)。

也许crap4j正是您所需要的。它将删除单元测试未达到的所有代码。这当然是最小化你的应用程序的艰难之路。

作为FindBugs团队的一员,我可以告诉你,不幸的是FindBugs没有做到这一点。如果你在我们的网站上搜索,唯一提到的“未使用的”检测器是未使用的字段。

我有一个项目,我目前正在做这个。。。。现在还很早,所以可能会留下一堆bug:


我知道您可以使用IntelliJ(免费版)(以及自动删除)。它有650多次检查。我想你可以用find bugs来做这件事。谢谢Peter,但我被Eclipse困住了:(Derek你回答了你自己的问题:)是的,我发现了一些模糊器可以做到这一点,我特别对使用FindBugs感兴趣。谢谢Ryan。我刚开始使用FB,没有扩展探测器的经验,所以感谢链接。但是为公共方法扩展UPM并不容易——被调用的方法和所有方法都必须存储在项目级别。你能告诉我任何这样的检测器吗?好问题,如果我戴着我的黑客代码帽,我会告诉你你尝试使用一个静态变量,因为我只是在一个jvm上运行findbugs,我很确定我不会面临任何类加载器的地狱。我还遇到了一个声称做这项工作的,但是我还没有试过。这个答案有点过时了。链接已更改为,并且有专用方法的规则: