Java IntelliJ能否将属性(get/setter)重构为字段?

Java IntelliJ能否将属性(get/setter)重构为字段?,java,intellij-idea,Java,Intellij Idea,比如说,我有一大堆实现了javabean风格的类,我想去掉getter/setter,而只使用公共字段。有没有办法在不破坏编译的情况下,使用Intellij14有效地重构它 示例-之前: class Baratheon { private String stannis; public String getStannis() { return stannis; } public void setStannis(String stannis) {

比如说,我有一大堆实现了javabean风格的类,我想去掉getter/setter,而只使用公共字段。有没有办法在不破坏编译的情况下,使用Intellij14有效地重构它

示例-之前:

class Baratheon {
    private String stannis;
    public String getStannis() {
        return stannis;
    }
    public void setStannis(String stannis) {
        this.stannis = stannis;
    }
}

class Lannister {
    public Lannister() {
        Baratheon b = new Baratheon();
        b.setStannis("dead");
    }
}
--之后:


重构过程中涉及的明显步骤包括:

  • 公开字段,保留访问者

  • 将客户端代码更改为直接访问字段,而不是通过访问器访问字段

  • 删除访问器

  • 您可以利用intellij中的“内联…”重构(Ctrl+Shift+n)来帮助执行步骤2


    我认为intellij中没有一个重构工具可以完成整个工作,要记住,只有当整个受影响的代码库都在一个项目中时,重构才是真正可能的。你可以考虑写一个完成这项工作的函数。

    1.使对字段的访问与getter的访问相同
    2.右键单击getter,然后选择重构/内联。。。(在Android Studio中)

    为什么要这样做?有很好的理由控制对字段值和语言的访问,对允许访问字段提供合理的本机支持,还可以让您在不破坏API的情况下恢复到getter/setter。在Java中,这是不可能的——一旦有人访问了您的领域,如果不更改API,就无法收回它。我希望避免这种争论,只关注intellijDidn的特性,我不知道内联重构。当选择“内联所有调用并删除方法(n次出现)”时,该方法将完成大部分工作。令人惊叹的!
    class Baratheon {
        public String stannis;
    }
    
    class Lannister {
        public Lannister() {
            Baratheon b = new Baratheon();
            b.stannis = "dead";
        }
    }