java – 未使用的私有方法,私有字段和局部变量

我们正在使用Sonar来审核我们的代码库.对于未使用的私有方法,未使用的私有字段和未使用的本地变量,几乎没有违规.

根据我的理解,私有方法和私有字段只能通过反射和Java Native Interface在类外部访问.我们在代码库中没有使用JNI,而是在某些地方使用反射.

所以我们计划的是对这些方法和字段进行完整的工作区搜索,如果这些方法和字段在任何地方都没有使用,那么这些将被注释掉.再次通过反射访问私有方法和字段的机会非常少.这是为了更安全的一面.

无法在方法之外访问未使用的局部变量.所以我们可以评论出这些.

你对此有什么其他建议吗?

解决方法:

我喜欢自己反思,但用几句话说:它可能是一场噩梦.将java反射保持在一个非常可控的(即无状态,无全局/外部变量用法)和最小范围.

要找什么?

要查找公开的私有字段和方法,请查找Field#setAccessible() and Method#setAccessible(),例如以下示例:

Field privateNameField = Person.class.getDeclaredField("name");
privateNameField.setAccessible(true);

Method privatePersonMethod = Person.class.getDeclaredMethod("personMeth", null);
privatePersonMethod.setAccessible(true);

所以,setAccessible()会让你有些冒烟,但getDeclaredField()和getDeclaredMethod()实际上是访问字段的地方(真正引起火灾的地方).

要特别注意它们中使用的值,特别是如果它们是变量(它们可能是变量),因为它们决定了所访问的字段.

做纯文本搜索

此外,在整个项目文件夹中对字段/方法名称进行纯文本搜索非常有用.我会说,如果你不确定,在进行全文搜索之前不要删除.

如果你还有很多其他依赖于这个项目的项目你正试图改变;如果你不是(或者不知道)种植那些(炸弹)的人,我会放手.只有真正需要改变才会改变.当您需要对其周围的代码进行更改时,最好的方法是逐个获取它们.

啊,如果你有它们,运行代码覆盖率的测试也可以帮助你发现未使用的代码.

上一篇:SonarQube-7.9.1+SQL Server2017在Windows环境下的安装与配置


下一篇:maven sonar idea docker 实现代码质量检查