Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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:何时使用字段与参数?_Java_Coding Style_Methods - Fatal编程技术网

Java:何时使用字段与参数?

Java:何时使用字段与参数?,java,coding-style,methods,Java,Coding Style,Methods,我当前的IVR应用程序使用一个包装类和几个方法来调用web服务,然后解析其结果。每个类都有一个“invoke”方法,该方法调用web服务,然后调用后续子方法将解析分解为逻辑块 每当一个或多个子方法中需要一个新的输入参数时,以前的开发人员都会将其作为参数添加到调用中,然后将其作为参数添加到子方法中 这是正确的方法吗?还是最好在类上设置一个字段,然后在必要时引用它 而不是: invoke (oldField1, oldField2, newField1) submethod1 (result

我当前的IVR应用程序使用一个包装类和几个方法来调用web服务,然后解析其结果。每个类都有一个“invoke”方法,该方法调用web服务,然后调用后续子方法将解析分解为逻辑块

每当一个或多个子方法中需要一个新的输入参数时,以前的开发人员都会将其作为参数添加到调用中,然后将其作为参数添加到子方法中

这是正确的方法吗?还是最好在类上设置一个字段,然后在必要时引用它

而不是:

 invoke (oldField1, oldField2, newField1)  
 submethod1 (results, oldField1, oldField2, newField1)  
 submethod2 (results, oldField1, oldField2, newField1)  
如果是:

 invoke(oldField1, oldField2, newField1){
   OldField1=oldField1
   OldField2=oldField2
   NewField1=newField1
 }
 submethod1(results)
 submethod2(results)
甚至:

 new (oldField1, oldField2, newField1){
   OldField1=oldField1
   OldField2=oldField2
   NewField1=newField1
 }
 invoke()
 submethod1(results)
 submethod2(results)

谢谢

第一种解决方案允许将对象设为无状态,并允许对所有调用使用唯一实例,即使是并行调用

第三种方法允许使对象有状态但不可变。它可以用于使用同一组字段的多个调用,即使是并行调用(如果设置为不可变)

这两种解决方案都是可以接受的。对象的状态越少,使用它就越容易,特别是在多线程环境中

对象的易变性越小,使用它就越容易


第二个使其成为有状态的可变对象,不能由多个线程使用(没有同步)。在我看来,它没有其他两个干净。

这取决于您的参数是数据还是识别模式/开关

我建议一个参数用于数据结构类型,另一个参数包含不同操作的枚举类型

然后根据枚举类型或操作模式,您可以选择执行类的策略


要限制这种增加参数的方法,可以提供一个接口。并迫使执行部门遵守这一点

我的一般规则是尽可能避免面向服务类中的状态性。尽管Java本身并不真正支持函数式编程,但最简单、最可伸缩的实现是第一种方法,它不使用成员变量

如果您的目标是避免频繁更改方法签名,则可以尝试使用更通用的字段封装:

public class Invoker {
    public static void invoke(ResultContainer result, List<String> parameters) {
        submethod1(result, parameters);
        submethod2(result, parameters);
    }
}
公共类调用程序{
公共静态void调用(ResultContainer结果,列表参数){
子方法1(结果、参数);
子方法2(结果、参数);
}
}
我还建议你看一下这本书,了解更多的想法