Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将带参数的Intellij方法重构为带字段的类_Java_Intellij Idea_Refactoring - Fatal编程技术网

Java 如何将带参数的Intellij方法重构为带字段的类

Java 如何将带参数的Intellij方法重构为带字段的类,java,intellij-idea,refactoring,Java,Intellij Idea,Refactoring,给出一种方法 public class SomeClass{ public void methodName (Param1 param1, Param2 param2, Param3 param){ ... } } 称为 SomeClass someObject = new SomeClass(); someObject.methodName(x, y, z); new MethodNamehandler(x, y, z).methodName(); 重构

给出一种方法

public class SomeClass{ 
    public void methodName (Param1 param1, Param2 param2, Param3 param){
        ...
    }
}
称为

SomeClass someObject = new SomeClass();
someObject.methodName(x, y, z);
new MethodNamehandler(x, y, z).methodName();
重构
someObject.methodName(x,y,z)的最快方法是什么到

public class MethodNameHandler{
    private Param1 param1;
    private Param2 param2;
    private Param3 param3;

    public MethodNameHandler(Param1 param1, Param2 param2, Param3 param3){
        this.param1 = param1;
        this.param2 = param2;
        this.param3 = param3;
    }

    public void methodName(){
            ...
    }
}
称为

SomeClass someObject = new SomeClass();
someObject.methodName(x, y, z);
new MethodNamehandler(x, y, z).methodName();

在IntelliJ 14.1.4和15.0中:

步骤1: 在方法声明上放置插入符号,按
ctrl+alt+shift+t
(或
cmd
,而不是
ctrl
,如果在Mac上),然后选择
7。参数对象…
。键入新类的名称(我使用了
Holder
),然后按
Refactor

弹出窗口将要求您输入
Holder
的默认值,将
保留为空
,这样编译器将告诉您是否有任何错误。在这种情况下,不需要默认值,因此应该正确重构它,而不会出现任何编译器错误

步骤2: 再次在编辑的方法上放置插入符号,
ctrl/cmd+alt+shift+t
,选择
4。移动…
Holder
类应可用并已选择。按
重构

步骤3:
最后,在
Holder
类中,第一步生成内联getter。在getter声明上放置插入符号,然后按ctrl/cmd+alt+n
。不幸的是,必须分别为每个对象执行此操作。

原始方法是静态的还是在某个对象上?@Jaroslaw原始方法在某个对象上。这是一个编译错误:
methodName(x,y,z)。你能更新你的问题并展示它现在的样子吗?我更新了问题我更新了答案。简言之,在第2步中,我们没有执行“转换为实例方法”,而是选择“移动”将其从一个类移动到另一个类。