我的Java类有些问题。当我调用函数时(对于exmaple int getCapacity(Edge e))它会改变我的对象(chagne Edge e)并且我不想这样做。不应该只是void函数改变对象吗?有什么帮助吗?
public class Edge{
private int start;
private int end;
private int capacity;
private int flow;
public Edge(int p, int k, int cap) {
this.start = p;
this.end = k;
this.capacity = cap;
this.flow=0;
}
public void setStart(int s){
this.start = s;
}
public static int getCapacity(Edge e){
e.setStart(-1);
return e.capacity;
}
public static void main(String[] args){
Edge e= new Edge();
int k=getCapacity(e));
e.print();
}
}
谢谢!
答案 0 :(得分:3)
不仅应该将函数更改为对象吗?
不一定。一个非常简单的示例是StringBuilder
,其中几乎所有方法都返回this
,因此您可以写:
builder.append(x).append(y);
然而, 令人惊讶地做出了一个getter修改状态。这对我来说听起来不错。目前还不清楚为什么 在这种特殊情况下更改了起点,但你肯定可以改变你的方法而不是那样做。
即便是这条规则也可能偶尔错误。一个简单的例子是LRU缓存,其中从获取数据影响状态,因为它将改变缓存溢出时保留哪些记录。但这是相对罕见的。
还不清楚为什么getCapacity
是静态方法。请注意静态方法,其参数与声明类的类型相同。除非故意像处理空引用(这不是),否则通常应将它们更改为实例方法。