参数化还是不参数化是个问题...
...当它只是一个接受输入并返回输出而不依赖于对象状态的函数时:因此,您必须有一个接受参数并执行一些魔术并返回值的方法...一个真正的函数 - - 你应该使用参数。你的方法是一个黑匣子。Javastatic
为此类方法提供了关键字,对于仅依赖于参数的任务,您应该使用静态方法。这些案例应该有参数化的方法。例子:
public static String encodeString(String input, String format)
...当它是一个仅处理对象状态并返回值的函数时:就像一个hashcode
方法。你永远不应该传递参数......该方法应该是一个实例方法......它应该使用实例字段来发挥作用。这是一个例子:
public String toString(){
return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
}
...当需要一些外部输入和一些状态属性时:就像您有一个基于外部输入对状态对象进行操作以返回结果的方法。只传递外部需要的参数。例如:
public String toFormat(String format){
if("json".equals(format) //<-- this is external agent.
return new JSONObject(this).toString();
else
return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
}
所以,这取决于你在做什么。
编辑1:(回答评论)
来到Why?
这是关于最小化冗余。这就是为什么上述几点应作为经验法则:do not create unnecessary objects; do not bloat the parameter list
。
我提到了在哪种情况下有哪些好的做法。你权衡你的情况并决定使用什么。所以,如果你有一个方法说,
int add(int a, int b){returns a+b;}
传递 a 和 b 并将此方法作为静态方法是一种很好的做法。但是在new Additor(a, b).add();
哪里做
public int add(){return this.a + this.b;}
不是那么好主意。