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

发布于 2024-11-16 19:00:36 字数 419 浏览 1 评论 0原文

我有这个类:

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

}

我决定不再需要 T 类型,并且不在类中使用它(我知道它始终是 Integer)。
但是,我有很多类似于 TimeIntCo 的类的参考。
有没有办法使用 Eclipse 重构来删除 T 类型而不导致引用中出现任何错误?
我的意思是一步完成,而不是查找和替换。

编辑:更清楚 - 如果我只是从类中删除 T 我有大约 10,000 个错误,我不想手动执行此操作,而且我不想使用查找和替换,因为我认为重构更安全。

I have this class:

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

}

I decided that the T type is not needed anymore, and it is not used in the class (I know it is always Integer).
However, I have a lot of references for the class that looks like TimeIntCo<Integer>.
Is there a way using Eclipse refactoring to remove the T type without causing any error in references?
I mean to do it in one step and not find&replace.

EDIT: to be more clear - if I just remove T from class I have about 10,000 errors, I don't want to do it manually, and I prefer not to use find&replace because I consider refactor safer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

沫尐诺 2024-11-23 19:00:36

引入一个超类

public class TimeIntCoSup extends TimeValueCo<Integer> {

}

并更改 TimeIntCo 来扩展它。

public class TimeIntCo<T> extends TimeIntCoSup {

}

然后使用Eclipse的Refactor->尽可能使用超类型

Introduce a superclass

public class TimeIntCoSup extends TimeValueCo<Integer> {

}

and change TimeIntCo to extend it.

public class TimeIntCo<T> extends TimeIntCoSup {

}

Then use Eclipse's Refactor -> Use Supertype Where Possible

記憶穿過時間隧道 2024-11-23 19:00:36

只需进行文本查找/替换 TimeIntCo ->所有 java 类上的 TimeIntCo

Just do a textual find/replace TimeIntCo<Integer> -> TimeIntCo on all java classes.

美煞众生 2024-11-23 19:00:36

我怀疑是否有对此进行重构。只需删除 ,保存文件,然后检查并修复可能导致的任何编译错误。 (如果不使用 T 类型参数,则不应该有任何需要纠正的编译错误...)


@ohadshai 评论:

然后我在 eclipse 中有大约 10,000 个错误...

我敢打赌,大多数错误都可以通过更改少量子类声明来修复。

您知道还有其他 IDE 可以做到这一点吗?想法?

不,我不。重构通常用于保留原始源代码含义的简单转换。这种转变不太可能做到这一点。

I doubt that there is a refactor for this. Just delete the <T>, save the file, and go through and fix any compilation errors that might result. (If the T type parameter is not used, there shouldn't be any compilation errors to correct ...)


@ohadshai comments:

then I have about 10,000 errors in eclipse...

I bet that most of them can be fixed by changing a small number of subclass declarations.

Do you know any other IDE that does that? IDEA?

No I don't. Refactors are generally used for simple transformations that preserve the meaning of the original source code. This transformation is unlikely to do that.

ゞ记忆︶ㄣ 2024-11-23 19:00:36

由于内置IDE重构无法处理你想要的,那么
如果您厌倦了手动查找/替换,这将起作用

while read -r file; do 
    sed -i 's/TimeIntCo<[[:alpha:]]*>/TimeIntCo/g' "$file"; 
done < <(find /path/to/src/ -type f -iname "*.java")` 

它会起作用,因为它会删除任何 TimeIntCoTimeIntCo 但它赢了不修复 TimeIntCo 内的 T someMethod(T t) 声明

只是提出一个替代方案,而且您可能没有使用类似 unix 的环境或 Bash,所以忽略它。

As the buildin IDE refactoring can't handle what you want, then
if you're bored of the manual find/replace, this will work

while read -r file; do 
    sed -i 's/TimeIntCo<[[:alpha:]]*>/TimeIntCo/g' "$file"; 
done < <(find /path/to/src/ -type f -iname "*.java")` 

It will work as in it will remove any TimeIntCo<T> or TimeIntCo<Integer> but it won't fix your decrlarations of T someMethod(T t) inside TimeIntCo

Just proposing an alternative, also you may not be using a unix like environment or Bash, so just ignore this.

梦年海沫深 2024-11-23 19:00:36

如果 T 没有给您带来任何好处,只需将其从类声明中删除即可:

public class TimeIntCo extends TimeValueCo<Integer>
{

}

它可以安全地保留在父类 TimeValueCo 中。

if T isn't providing you any benefit, just drop it from the class declaration:

public class TimeIntCo extends TimeValueCo<Integer>
{

}

It can safely remain in the parent class TimeValueCo.

笑梦风尘 2024-11-23 19:00:36

在 Eclipse 中使用正则表达式搜索和替换(搜索 | 文件):
搜索:SomeClass\<.*\>
并替换为:SomeClass
根据需要对子类重复此操作。

Use regular expression search and replace in Eclipse (Search | File):
search for: SomeClass\<.*\>
and replace with: SomeClass.
Repeat for subclassses as necessary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文