Eclipse:以编程方式操作类



我刚刚遇到一个问题,我有10个(大约)Java类,所有这些都是我想要的:

  1. 向其构造函数添加一个形式参数"Stringnewparam">
  2. 将其作为一个实际参数添加到对超类构造函数的super()调用中(因此,结果应该是super(…,newparam))

很明显,原因是这些类的公共超类现在多了一个构造函数参数,所有扩展类都必须适应。

我简直不敢相信,所有的课我都需要手工完成。Eclipse内部必须包含所有必需的概念,如"构造函数"、"参数"等。有办法为此创建脚本吗?

如果这是微不足道的/众所周知的,我很抱歉,我不得不承认,我真的不知道,也很感激任何暗示。

更改每个子类的构造函数签名可能需要使用某种脚本。我不认为IDE会在每个构造函数中自动推断出新参数,因为每个子类可能会以不同的方式使用新参数。

由于您使用的是Eclipse,您可以通过选择超类的构造函数并点击alt+shift+c(重构->更改方法签名的快捷方式…)来跳过第二个需求

当您通过提供的GUI添加参数时,对该构造函数的所有引用(例如扩展类中的super调用)也将更新。如果需要,您甚至可以定义一个默认值。然后,如果需要,您可以修改每个扩展类的构造函数,使其也包含新参数(遗憾的是,手动)。

感谢您的评论和回答。目前似乎还没有(广泛)已知的Eclipse内置方法来实现我想要的功能。简而言之:

向超类添加一个新的构造函数参数,同时,创造在所有扩展类的构造函数中使用相同的参数,并传递参数传递到超类构造函数

然而,应该注意的是,函数

向超级类添加一个新的构造函数参数,并将该参数的默认值添加到所有扩展类

通过refactor -> Change method signature...工作(感谢@Zircon)。

如果你真的有很多类,一个相当明显的解决方案就是写一个脚本。brahimfes提出了一个Java类,它的优点是不需要新的语言或新的工作环境,因为我的问题是特定于Java的。我还认为,也许sed脚本可以做到这一点。然而,我没有尝试,第一,识别正确的行(构造函数和超类构造函数调用,尽管第二个调用很琐碎),第二,识别添加参数的正确位置,第三,实际添加参数。可能有效,我没有尝试,我只是怀疑你会在这样一个脚本上工作多久,直到它没有错误。

现在,我终于找到了解决方案。我意识到我在每个子类中总是有相同的键笔划(在我手动将新参数添加到超类构造函数之后):

  1. 选择构造函数行
  2. 将光标放在和处,并回溯3个位置(括号)
  3. 添加形式参数
  4. 沿着一行往下走
  5. 转到这一行的末尾(恰好是super()调用)并回溯一个位置
  6. 添加实际参数

有一些程序可以创建这种makros,我得到了其中一个的试用版(我在Mac上),并用这种方式完成了。

当然,这实际上仍然不是我问题的解决方案,因此我不会将这篇文章标记为解决方案。虽然我现在有了一个makro,几乎不用打字,但我仍然需要手动打开编辑器中的每个类,单击正确的行,然后启动makro。这个程序在将来仍然可以为我节省类似需求的时间。但这并不是我所希望的,它将是一些Eclipse内置的脚本语言,可以访问Java语法元素,从而获得比正则表达式更高级的访问权限。

最新更新