重构 Java 项目会导致数百个 "X not public" 错误

Refactoring a Java project causes hundreds of "X not public" errors

我正忙于升级一个古老的 java 应用程序,编译后我着手重新组织代码结构。目前在一个庞大的文件夹中有 500 个文件,因此我需要将其拆分为一个更整洁的文件夹结构。在我移动一些文件的那一刻,编译器生成了一堆 "X() is not public in <BaseClass>" 错误。是的,重构工具向两侧添加了包语句和导入,

显然每个 class 的所有成员都具有隐式可见性,即:

 void setSelection(int x){...}

除了手动添加可见性属性之外,有没有更快的方法来解决这个问题,减少编辑工作?

 public void setSelection(int x){...} /// Yay! only 5000 more occurrences to go!

您可以使用正则表达式尝试使用 NetBeans 进行搜索替换。 我不太了解 Netbeans,但我知道这是可能的,而且对于 Eclipse,它相当不错。 提示:在验证替换之前观看预览。

例如,在您的情况下,您可以使用它:

    search regex = (^[^\n\w]*void\s.*$)
    replacement = public [=10=]

如果您的方法中有其他 "void" 作为 return 的内容,您可以将 "void" 替换为与您的 return 类型更相关的表达式。

我认为你应该手动解决这个问题。对每个class和class成员判断访问是否应该public,protected,private 或包私有。创建/修复模块化和抽象边界不是我会信任的愚蠢工具。

是的,如果您有数百条错误消息,您有很多地方需要更正。但是最终的结果将是质量更好的代码......而不是盲目地将所有包私有更改为 public.