如何使用重构从类中删除泛型类型

时间:2011-06-22 13:46:31

标签: java eclipse refactoring

我有这堂课:

public class TimeIntCo<T> extends TimeValueCo<Integer>
{

}

我决定不再需要T型了,并且它没有在课堂上使用(我知道它总是整数)。
但是,我有很多类似于TimeIntCo<Integer>的类的引用 有没有办法使用Eclipse重构来删除T类型而不会在引用中引起任何错误?
我的意思是一步完成,而不是找到和替换。

编辑:更清楚 - 如果我只是从课程中删除T我有大约10,000个错误,我不想手动执行,我不想使用找到并替换因为我认为重构更安全。

5 个答案:

答案 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中。