gpt4 book ai didi

java - 如何 "disable"Java对象?

转载 作者:行者123 更新时间:2023-12-01 08:13:23 25 4
gpt4 key购买 nike

我有一堂这样的课:

public class DatabaseSession {

public makeCallOne() {...}
public makeCallTwo() {...}
public close() { ... }

}

如果用户实例化此类,我希望他们能够调用 makeCallOne 和 makeCallTwo。但是,如果它们调用 close(),则对 makeCallOne() 或 makeCallTwo() 的任何后续调用都应返回异常。

我可以在每个方法顶部使用 if 语句来完成此操作,但这很容易忘记编写。使用什么标准机制来表示“这个对象现在没用了。你不能再调用它了。”?

最佳答案

java类库中没有禁用调用。

您应该创建一个 State 枚举,并在每个方法的开头检查它作为防御性编程。然后,您的类将成为一个有限状态机,您可以在某些状态下执行某些操作。因此,您可能会被实例化,然后打开,然后关闭等。此信息可以编码在 State 枚举中,该枚举非常灵活且可以随时更改。

例如,

public class DatabaseSession {
private State state;

...


public makeCallOne() throws Exception {
if (state == State.CLOSED)) {
throw new Exception("Database Session has already been closed");
}
...
}
public makeCallTwo() throws Exception {
if (state == State.CLOSED)
throw new Exception("Database Session has already been closed");
}
...
}

public close() {
state = State.CLOSED;
...
}

private enum State {
OPEN;
CLOSED;
}

}

关于java - 如何 "disable"Java对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533508/

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