我有这堂课:
public class TimeIntCo<T> extends TimeValueCo<Integer>
{
}
我决定不再需要T型了,并且它没有在课堂上使用(我知道它总是整数)。
但是,我有很多类似于TimeIntCo<Integer>
的类的引用
有没有办法使用Eclipse重构来删除T
类型而不会在引用中引起任何错误?
我的意思是一步完成,而不是找到和替换。
编辑:更清楚 - 如果我只是从课程中删除T
我有大约10,000个错误,我不想手动执行,我不想使用找到并替换因为我认为重构更安全。
答案 0 :(得分:4)
只需进行文字查找/替换TimeIntCo<Integer>
- &gt;所有java类都TimeIntCo
。
答案 1 :(得分:3)
介绍一个超类
public class TimeIntCoSup extends TimeValueCo<Integer> {
}
并更改TimeIntCo
以扩展它。
public class TimeIntCo<T> extends TimeIntCoSup {
}
然后使用Eclipse的Refactor - &gt;尽可能使用超类型
答案 2 :(得分:1)
我怀疑是否有重构。只需删除<T>
,保存文件,然后检查并修复可能导致的任何编译错误。 (如果未使用T
类型参数,则不应出现任何编译错误以进行更正...)
@ohadshai评论:
然后我在eclipse中有大约10,000个错误......
我敢打赌,通过更改少量的子类声明,可以解决大多数问题。
你知道其他任何IDE吗? IDEA?
不,我没有。重构通常用于保留原始源代码含义的简单转换。这种转变不大可能。
答案 3 :(得分:1)
由于buildin IDE重构无法处理你想要的东西,所以 如果您对手动查找/替换感到厌倦,这将起作用
while read -r file; do
sed -i 's/TimeIntCo<[[:alpha:]]*>/TimeIntCo/g' "$file";
done < <(find /path/to/src/ -type f -iname "*.java")`
它会正常工作,会删除所有TimeIntCo<T>
或TimeIntCo<Integer>
,但不会修复T someMethod(T t)
TimeIntCo
内{{1}}的解释
只是提出一个替代方案,你也可能没有使用unix环境或Bash,所以请忽略它。
答案 4 :(得分:0)
如果T没有为您提供任何好处,只需将其从类声明中删除:
public class TimeIntCo extends TimeValueCo<Integer>
{
}
它可以安全地保留在父类TimeValueCo
中。