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

时间:2013-05-13 01:46:20

标签: java sonarqube

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

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

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

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

您对此有任何其他建议吗?

2 个答案:

答案 0 :(得分:4)

我喜欢自己反思,但用几句话说:它可能是一场噩梦。将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()确实是访问字段的地方(真正引起火灾的地方)。

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

进行纯文本搜索

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

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

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

答案 1 :(得分:0)

通过反射调用未使用的方法很奇怪。未使用的字段只能通过反射用作存款,并通过反射使用。很奇怪。

反射更多地被用作通用bean复制工具。

因此彻底清理应该绝对没有问题。用它来研究java.reflect的用法是时候了。反思代码是否合法。这比在字符串中查找私有字段的使用更加智能。

是的,将其从源代码中删除,这会加快读取速度。

(当然我明白这是一个类型的问题:我是否监督过。)