从非void函数修改对象

时间:2013-03-15 14:10:13

标签: java class function void

我的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();
    }
}

谢谢!

1 个答案:

答案 0 :(得分:3)

  

不仅应该将函数更改为对象吗?

不一定。一个非常简单的示例是StringBuilder,其中几乎所有方法都返回this,因此您可以写:

builder.append(x).append(y);

然而, 令人惊讶地做出了一个getter修改状态。这对我来说听起来不错。目前还不清楚为什么 在这种特殊情况下更改了起点,但你肯定可以改变你的方法而不是那样做。

即便是这条规则也可能偶尔错误。一个简单的例子是LRU缓存,其中从获取数据影响状态,因为它将改变缓存溢出时保留哪些记录。但这是相对罕见的。

还不清楚为什么getCapacity是静态方法。请注意静态方法,其参数与声明类的类型相同。除非故意像处理空引用(这不是),否则通常应将它们更改为实例方法。