gpt4 book ai didi

java - 从非 void 函数修改对象

转载 作者:行者123 更新时间:2023-12-01 23:57:03 24 4
gpt4 key购买 nike

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

谢谢!

最佳答案

Shouldn't only void functions change objects?

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

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

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

即使该规则偶尔也可能是错误的。一个简单的例子是 LRU 缓存,从其中获取数据确实会影响状态,因为它将更改缓存溢出时保留的记录。不过这种情况相对较少。

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

关于java - 从非 void 函数修改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com