Eclipse:以编程方式操作类

时间:2017-11-10 14:36:12

标签: java eclipse automation

我刚刚遇到这样的问题:我有10个(或者更多)Java类,我想要的所有这些:

  1. 将正式参数“String newparam”添加到其构造函数
  2. 将此作为实际参数添加到对超类构造函数的super()调用中(因此,结果应为super(...,newparam))。
  3. 显然,原因是这些类的公共超类现在有一个构造函数参数,并且所有扩展类都必须适应。

    我无法相信我需要为所有课程手动完成这项工作。 Eclipse必须在其内部具有所有必需的概念,如“构造函数”,“参数”等。有没有为此创建脚本的方法?

    我道歉,如果这是微不足道/众所周知的,我必须承认我真的不知道并欣赏任何提示。

2 个答案:

答案 0 :(得分:0)

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

由于您正在使用Eclipse,因此您可以通过选择超类的构造函数并点击alt+shift+c(重构的快捷方式 - >更改方法签名...)来略微跳过您的第二个要求。

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

答案 1 :(得分:0)

感谢您的评论和解答。目前似乎没有(广泛)已知的Eclipse内置方法来做我想要的。 简而言之,这就是:

  

向超类添加新的构造函数参数,同时,     创建     所有扩展类的构造函数中的相同参数并传递给它     参数到超类构造函数

然而,应该注意的是功能

  

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

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

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

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

  1. 选择构造函数行。
  2. 将光标放在and和backtrack 3位置(括号)。
  3. 添加形式参数。
  4. 走一行。
  5. 转到此行的末尾(总是恰好是super()调用)并回溯一个位置。
  6. 添加实际参数。
  7. 有些程序允许创建这种类型的makros,我得到了其中一个的试用版(我在Mac上)并且这样做了。

    当然,这仍然不是我问题的解决方案,因此我不会将此帖标记为解决方案。虽然我现在有一个makro让我几乎完全打字,我仍然需要手动打开编辑器中的每个类,单击正确的行然后激活makro。 该程序仍将为我节省类似要求的时间。但它不是我希望的那样,它将是一些Eclipse内置的脚本语言,可以访问Java语法元素,以获得更高级别的访问,然后正则表达式可以提供。