5

我们正在使用 Sonar 来审查我们的代码库。未使用的私有方法、未使用的私有字段和未使用的局部变量很少有违规行为。

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

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

无法在方法之外访问未使用的局部变量。所以我们可以注释掉这些。

您对此还有其他建议吗?

4

2 回答 2

4

我自己也喜欢反思,但简而言之:这可能是一场噩梦。将 java 反射保持在一个非常可控的范围内(即无状态,不使用全局/外部变量)和最小范围。

要找什么?

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

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

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

所以,setAccessible()会给你一些烟雾,但getDeclaredField()实际上getDeclaredMethod()是访问字段的地方(真正引起火灾的原因)。

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

进行纯文本搜索

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

如果您有许多其他项目依赖于您正在尝试更改的项目;如果你不是(或不知道)埋下这些(炸弹)的人,我会放手的。只有在真的需要时才会改变。最好的做法是在您需要对其周围的代码进行更改时一一获取它们。

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

于 2013-05-13T02:41:10.417 回答
0

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

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

所以彻底的清理应该是绝对没有问题的。最好花时间研究一下 java.reflect 的用法;反射代码是否合法。这比在字符串中寻找私有字段的使用更聪明。

是的,从源代码中删除它,这样可以加快阅读速度。

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

于 2013-05-13T02:13:15.237 回答