gpt4 book ai didi

java - IntelliJ 中的简单自定义重构

转载 作者:太空狗 更新时间:2023-10-29 22:47:53 26 4
gpt4 key购买 nike

这个问题是后续for this .

假设我有一些 Foo 类。

class Foo {
protected String x = "x";

public String getX() {
return x;
}
}

我有一个使用 Foo 并违反 LoD ( Law of Demeter ) 的程序。

class Bar {
protected Foo foo;

public Bar() {
this.foo = new Foo();
}

public Foo getFoo() {
return foo;
}
}

public static void main(String [] args) {
Bar bar = new Bar();
String x = bar.getFoo().getX();
}

我可以分两步重构此代码以使用 LoD。

  1. m bar.getFoo().getX() -> getFooX( bar)(提取到方法,也查找和替换出现的地方)
  2. F6 getFooX(bar) -> bar.getFooX() (移动到实例方法,也查找和替换出现的地方)<

使用 Bar 的程序不再违反 LoD。

class Bar {
protected Foo foo;

public Bar() {
this.foo = new Foo();
}

public Foo getFoo() {
return foo;
}

public String getFooX() {
return foo.getX();
}
}

public static void main(String [] args) {
Bar bar = new Bar();
String x = bar.getFooX();
}

我想知道是否有一种方法可以在 IntelliJ 中制作自定义重构方法,将这两个步骤合并为一个。

编辑我收到了 JetBrains 的回复,其中包含指向预先存在的功能请求的链接。如果您觉得有用,请投票!

Hello Michael,

Seems we have similar request in YouTrack:https://youtrack.jetbrains.com/issue/IDEA-122400. Feel free to votefor it and leave comments.

Best regards, Yaroslav Bedrov JetBrains

编辑至少有一种方法可以检查 Demeter 法则问题。 screenshot

Here is a gist其中包含仅查找 LoD 违规的检查配置文件。你可以import it into IntelliJ .

最佳答案

getFooX() 方法添加到 Bar 后,我会使用 Edit> Find> 用以下表达式替换 Structurally:

搜索模板:

$instance$.getFoo().getX()

替换模板:

$instance$.getFooX()

它完美地完成了这项工作。也许您可以向 $instance$ 变量添加一些约束以缩小搜索范围,但这只有在您有多个具有该方法名称的类时才有用。

关于java - IntelliJ 中的简单自定义重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com