我们正在使用Sonar来审核我们的代码库。对于未使用的私有方法,未使用的私有字段和未使用的本地变量,几乎没有违规。
根据我的理解,私有方法和私有字段只能通过反射和Java Native Interface在类外部访问。我们在代码库中没有使用JNI,而是在某些地方使用反射。
所以我们计划的是对这些方法和字段进行完整的workspace
搜索,如果这些方法和字段在任何地方都没有使用,那么这些将被注释掉。再次通过反射访问私有方法和字段的机会非常少。这是为了更安全的一面。
无法在方法之外访问未使用的局部变量。所以我们可以对这些进行评论。
您对此有任何其他建议吗?
答案 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的用法是时候了。反思代码是否合法。这比在字符串中查找私有字段的使用更加智能。
是的,将其从源代码中删除,这会加快读取速度。
(当然我明白这是一个类型的问题:我是否监督过。)