0

我的 Java 类有一些问题。当我调用函数(例如 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();
    }
}

谢谢!

4

1 回答 1

3

不应该只 void 函数改变对象吗?

不必要。一个非常简单的例子是StringBuilder,几乎所有的方法都返回this,所以你可以这样写:

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

但是,使 getter 修改状态令人惊讶这对我来说听起来是个坏主意。目前尚不清楚为什么在这种特殊情况下您更改开始,但您当然可以更改您的方法以不这样做。

不过,即使这条规则偶尔也会出错。一个简单的例子是 LRU 缓存,从中获取数据确实会影响状态,因为它会在缓存溢出时更改保留哪些记录。不过这种情况比较少见。

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

于 2013-03-15T14:12:31.433 回答