IntelliJ 重构以内联冗余数据 class
IntelliJ refactoring to inline redundant data class
是否有一系列 IntelliJ 自动重构可以摆脱多余的 class Foo?
重构前:
public static class Foo {
private final String s;
public Foo(String s) {
this.s = s;
}
public String getS() {
return s;
}
}
private static void run() {
Foo f = new Foo("blah");
f.getS().length();
f.getS().getBytes();
Foo f2 = new Foo("blahg");
f2.getS().length();
f2.getS().getBytes();
}
重构后:
private static void run() {
String f = "blah";
f.length();
f.getBytes();
String f2 = new "blahg";
f2.length();
f2.getBytes();
}
在我的具体案例中进行自动重构的原因是现实生活中 Foo 被使用了几千次。但我也只是感兴趣。使用其他自动化步骤很容易将代理对象获取到 Foo 的状态,但我只是不知道如何进行最后一点。
不确定这在更通用的设置中如何工作,但我会:
重构 Foo
以将 getS
的名称更改为非常独特的名称,例如XXXXXXXXX
字符串用空字符串替换.XXXXXXXXX()
正则表达式 stringn 将 Foo (\w+) = new Foo\("(\w+)"\);
替换为 String = ""
;
这将处理 run
方法中的所有内容。现在你只需要手动删除 Foo
,虽然它不是 IntelliJ 重构,但它只需要在一个地方完成,所以可能是可以接受的。
更安全的方法是使用结构替换
- 在菜单中搜索结构替换
- 在搜索框中输入
$Instance$.getS().$MethodCall$($Parameter$)
- 在 $Instance$ 上添加一个过滤器,使其仅是 Foo 的实例
- 替换为:
$Instance$.getS().$MethodCall$($Parameter$)
- 在此之后您可以继续进行结构替换并找到所有实例并替换它们,但只 运行
Migrate
并从 class [= 创建自定义类型映射更容易13=] 到“字符串”
- 如果你想再次使用结构替换,你可以使用类似这样的东西来查找和替换
Foo $name$ = new Foo($Parameter$);
String $name$ = $Parameter$;
是否有一系列 IntelliJ 自动重构可以摆脱多余的 class Foo?
重构前:
public static class Foo {
private final String s;
public Foo(String s) {
this.s = s;
}
public String getS() {
return s;
}
}
private static void run() {
Foo f = new Foo("blah");
f.getS().length();
f.getS().getBytes();
Foo f2 = new Foo("blahg");
f2.getS().length();
f2.getS().getBytes();
}
重构后:
private static void run() {
String f = "blah";
f.length();
f.getBytes();
String f2 = new "blahg";
f2.length();
f2.getBytes();
}
在我的具体案例中进行自动重构的原因是现实生活中 Foo 被使用了几千次。但我也只是感兴趣。使用其他自动化步骤很容易将代理对象获取到 Foo 的状态,但我只是不知道如何进行最后一点。
不确定这在更通用的设置中如何工作,但我会:
重构
Foo
以将getS
的名称更改为非常独特的名称,例如XXXXXXXXX
字符串用空字符串替换
.XXXXXXXXX()
正则表达式 stringn 将
Foo (\w+) = new Foo\("(\w+)"\);
替换为String = ""
;
这将处理 run
方法中的所有内容。现在你只需要手动删除 Foo
,虽然它不是 IntelliJ 重构,但它只需要在一个地方完成,所以可能是可以接受的。
更安全的方法是使用结构替换
- 在菜单中搜索结构替换
- 在搜索框中输入
$Instance$.getS().$MethodCall$($Parameter$)
- 在 $Instance$ 上添加一个过滤器,使其仅是 Foo 的实例
- 替换为:
$Instance$.getS().$MethodCall$($Parameter$)
- 在此之后您可以继续进行结构替换并找到所有实例并替换它们,但只 运行
Migrate
并从 class [= 创建自定义类型映射更容易13=] 到“字符串” - 如果你想再次使用结构替换,你可以使用类似这样的东西来查找和替换
Foo $name$ = new Foo($Parameter$);
String $name$ = $Parameter$;