是否有工具可以进行复制+粘贴+替换源代码的手动工作?

时间:2012-01-20 20:04:03

标签: java eclipse

下午好,我正在为原始 int 的自定义数组列表编写代码(以避免装箱的开销),原始字节的数组列表 s,原始 long 的数组列表,原始 char 的数组列表,以及原语 double 的数组列表。

这5个类的代码非常类似。基本上逻辑是(几乎)相同的。但是因为无法使用泛型,所以无法定义可用于所有5个类的公共泛型函数(如果我错了,请纠正我)。

因此,我必须每次复制相同的代码5次进行字符串搜索替换。当我必须编辑类时会出现问题,因为我必须进行相同的编辑x5次。

现在我想知道维护重复样板代码的最佳方法是什么?

是否有可以进行复制+粘贴+替换手动工作的工具?

(例如我可以定义一个转换函数F()并告诉工具:对于类mypackage.IntArrayList的源代码,将转换F()应用到类mypackage.ByteArrayList的源代码中, mypackage.LongArrayListmypackage.CharArrayListmypackage.DoubleArrayList)?

3 个答案:

答案 0 :(得分:3)

  

避免投射的开销

我认为你的意思是(联合国)拳击,而不是铸造; )

  

现在我想知道保持重复的最佳方法是什么   像这样的样板代码?

现在,我知道这个答案会被一些人不赞成,但是......

Trove API的工作方式很简单:自定义和自动代码生成工具。

Trove是基于原语的API集合,当与原语一起使用时,它们围绕默认Java集合运行。将Trove TIntIntHashMap 与(HashMap< Integer,Integer> *)进行比较甚至不是很有趣。对于默认的Java API来说这是可耻的......

他们遇到了你遇到的问题。他们使用代码生成工具解决了这个问题。

另请注意, Trove 已经有一个由原语支持的TIntArrayList,这些原语可能已经或者可能没有,现在已经执行了(如果我正确理解了您的问题)。< / p>

答案 1 :(得分:2)

根据定义,任务似乎相当复杂。我怀疑你会发现任何现有的工具来做这样的事情。

作为替代方案,请考虑代码生成:使用单个变量定义模板以表示基元类型,并从中生成所有类型的代码。对于生命周期,更改模板而不是生成代码。

答案 2 :(得分:1)

从标签来看,听起来你正在使用Eclipse。您可以进行全局搜索和替换,但不是很明显。转到“搜索”菜单,正常进行搜索,然后在看到搜索结果窗格时,右键单击并单击“全部替换”