Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 如何";“拉下”;eclipse中重构时的参数?_Java_Eclipse_Refactoring - Fatal编程技术网

Java 如何";“拉下”;eclipse中重构时的参数?

Java 如何";“拉下”;eclipse中重构时的参数?,java,eclipse,refactoring,Java,Eclipse,Refactoring,重构前: public interface Service { public void hello(Person p); } public class BlackPersonServiceImpl implements Service { @Override public void hello(Person p) { //... } } public class WhitePersonServiceImpl implements Ser

重构前:

public interface Service {

    public void hello(Person p);
}

public class BlackPersonServiceImpl implements Service {

    @Override
    public void hello(Person p) {
        //...
    }

}


public class WhitePersonServiceImpl implements Service {

    @Override
    public void hello(Person p) {
        //...
    }

}

public class BeforeRefactor {

    public static void main(String[] args) {
        String str = args[0];
        Person p = JSON.parseObject(str, Person.class);
        Service service = getServiceFromSpringContainer();
        service.hello(p);
    }

    private static Service getServiceFromSpringContainer() {
        //...
        return null;
    }
}
public interface Service {

    public void hello(String str);
}

public class WhitePersonServiceImpl implements Service {

    @Override
    public void hello(String str) {
        Person person = JSON.parseObject(str, Person.class);
        //do something to person...
        //...
    }

}

public class AfterRefactor {

    public static void main(String[] args) {
        String str = args[0];
        Service service = getServiceFromSpringContainer();
        service.hello(str);
    }

    private static Service getServiceFromSpringContainer() {
        //...
        return null;
    }
}
重构后:

public interface Service {

    public void hello(Person p);
}

public class BlackPersonServiceImpl implements Service {

    @Override
    public void hello(Person p) {
        //...
    }

}


public class WhitePersonServiceImpl implements Service {

    @Override
    public void hello(Person p) {
        //...
    }

}

public class BeforeRefactor {

    public static void main(String[] args) {
        String str = args[0];
        Person p = JSON.parseObject(str, Person.class);
        Service service = getServiceFromSpringContainer();
        service.hello(p);
    }

    private static Service getServiceFromSpringContainer() {
        //...
        return null;
    }
}
public interface Service {

    public void hello(String str);
}

public class WhitePersonServiceImpl implements Service {

    @Override
    public void hello(String str) {
        Person person = JSON.parseObject(str, Person.class);
        //do something to person...
        //...
    }

}

public class AfterRefactor {

    public static void main(String[] args) {
        String str = args[0];
        Service service = getServiceFromSpringContainer();
        service.hello(str);
    }

    private static Service getServiceFromSpringContainer() {
        //...
        return null;
    }
}
这就是我想要的(我认为“下拉”不是描述它的“正确”词…)

我在eclipse中尝试过“引入参数对象”,但它不起作用

有许多“服务”的实现。我不想一个一个地改变它们

有没有解决这个问题的好办法


谢谢

如果我没有弄错,您希望更改接口中的方法签名。
在Doc中,您可以更改您的方法签名:

更改参数名称、参数类型、参数顺序,并更新对相应方法的所有引用。此外,可以删除或添加参数和抛出的异常,并且可以更改方法返回类型和方法可见性。
可用:方法或在选择文本时解析为方法
快捷方式:
Alt+Shift+C

选项:在“更改方法签名”对话框中启用“保留原始方法作为已更改方法的委托”,以保留原始方法


您可以对单个类和单个方法执行此操作(尽管这是akward和一系列小的重构步骤),但不能同时跨多个类型。

我也尝试过,但我必须在“hello”方法中逐个添加“Person-Person=JSON.parseObject(str,Person.class);”以避免编译错误。