【问题标题】:Batch refactoring to make Java method arguments final批量重构以使 Java 方法参数最终化
【发布时间】:2011-10-25 09:59:28
【问题描述】:

我正在寻找一种对完整 Java 应用程序执行批量重构的方法。在这种情况下,将方法参数设置为最终的,但情况还不是这样。

这里有人知道这样的工具吗?或者可以解析 Java 源代码并且可以通过此类更改进行扩展的东西。

【问题讨论】:

  • 出于兴趣,想这样做的背后是什么想法?
  • @aix 这似乎没有必要,老实说也没有。但我也采用了这种风格。它可以防止您意外地重新分配方法参数。大多数情况下,这不会是一个问题,但要使论点最终化并不费力。此外,当一个参数不是最终的而所有其他参数始终是最终的时,很明显您打算重新分配这个参数(例如,用它的修剪版本替换一个字符串)。
  • 我很赞同这个想法,但我的方法通常太小了,只是额外的噪音。我试了一会儿就放弃了——Java已经够难读了。
  • 在重新分配方法参数时,避免之后难以跟踪的错误确实是一个问题。

标签: java coding-style final


【解决方案1】:

您可以在 IntelliJ 中进行批量更改,以将可以是 final 的每个字段、局部变量或参数更改为 final。

使用该选项进行代码分析,并在全局范围内“应用修复”,确保它仍然可以编译,因为在奇怪的情况下它并不总是 100% 正确。

【讨论】:

  • 酷!也许我应该给 IntelliJ 一个机会。到目前为止我还没有,因为它在从 SVN 中检查内容时遇到问题。
【解决方案2】:

正如 Peter Lawrey 所建议的,IntelliJ 可以做到这一点。

分析 -> 检查代码 -> 自定义配置文件

在“代码样式问题”部分,您有:

字段可能是最终字段

This inspection reports any fields which may safely be made final. A static field may 
be final if it is initialized in its declaration or in one static class initializer, but 
not both. A non-static field may be final if it is initialized in its declaration or in 
one non-static class initializer or in all constructors.
Powered by InspectionGadgets

局部变量或参数可以是final

This inspection reports parameters or local variables, found in the specified inspection
scope, that may have a final modifier added.

Use check boxes in the inspection options below, to define whether parameters or local
variables (or both) are to be reported.

这可能只会使 final 成为安全的变量,但您试图发现的变量将保持非最终变量。不过,这是一种发现它们的方法。

【讨论】:

    【解决方案3】:

    我不知道 Eclipse 或 NetBeans 中有任何此类重构。但是一个体面的正则表达式替换就可以了。为了确保您不会在不应该发生的地方意外执行它,您可能需要手动确认每个替换。但是,如果您有数百个课程,这可能并不可行。在这种情况下,到处进行替换,然后检查与旧版本的差异可能是有用的。

    如果任何参数因为被覆盖而不能成为最终参数,它会在编译期间变得清晰。

    【讨论】:

    • Netbeans 7.1beta 开始了类似的东西,称为“检查和转换”。例如,已经有可能删除未使用的导入语句。我想这也是一个时间问题。
    • @JanGoyvaerts 有趣!更强大的重构总是好的。关于未使用的导入,快速 ctrl+shift+i 应该修复导入,包括删除未使用的导入。我知道它至少在 7.0.1 中会这样做。
    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2014-02-24
    相关资源
    最近更新 更多