34

我无法为以下场景找到正确的重构选项:

我有这样的代码(在 Outer.java 中):

public class Outer {

    // ... class stuff

    public static class Inner {
        // ... inner class stuff   
    }
}

我正在寻找一种方法来选择 Inner,并将其转换为顶级类,在它自己的.java源文件中。我知道这很容易通过复制/粘贴等手动完成,但是内部类在很多地方都被引用,我希望重构选项在它被引用的任何地方处理更改。

我已经尝试过这个选项,但是这对一个我不太理解Refactor -> Extract Class...的字段做了一些奇怪的事情。data

Eclipse 版本是 3.5.1 Galileo。

如何将静态内部类重构为顶级类?


编辑:不敢相信我忽略了这样做的选项。感谢您的所有正确答案,+1 给大家。我仍然需要接受答案,所以如果有任何更有用的信息,例如脚本的陷阱,留下答案仍然是有目的的。

4

6 回答 6

51

这太容易了,我不敢相信我错过了:

将光标放在内部类型中的任意位置,右键单击并选择:
Refactor -> Convert Member Type to Top Level...

(默认设置中没有快捷方式)

这会自动提取内部类型,并将其放在它自己的文件中,与外部类型位于相同的包和目录中。

更新

在 Eclipse 的更高版本中,此重构已重命名为“将类型移动到新文件”

于 2010-01-22T14:45:42.070 回答
6

为了完整起见,Eclipse 4.x 版更改了术语,现在他们将该操作称为Move Type to New File...

将类型移动到新文件

于 2015-06-29T12:10:28.923 回答
3

提取类不是你想要的。

我刚刚使用 Eclipse 3.4.2 做到了这一点

  1. 选择内部
  2. 右键单击“重构->将成员类型转换为顶级...”
于 2010-01-22T14:51:59.017 回答
2

我有 3.4.1,如果我右键单击内部,>重构,我有选项“将成员类型隐藏到顶层..”,这正是你想要的。

于 2010-01-22T14:48:12.130 回答
2

使用重构->将成员转换为顶级类型

于 2010-01-22T14:51:51.903 回答
2

对于 Intellj2018.1。

  1. 右键单击内部类
  2. 重构
  3. 移动
  4. 移动到上层

在此处输入图像描述

在此处输入图像描述

于 2018-05-09T02:37:48.020 回答