gpt4 book ai didi

java - 我怎么知道一个类的实例是否已经存在于内存中?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:53 26 4
gpt4 key购买 nike

我如何知道一个类的实例是否已经存在于内存中?


我的问题是,如果类的实例存在,则不需要读取方法这是我的代码

private void jButton (java.awt.event.ActionEvent evt) {
PNLSpcMaster pnlSpc = new PNLSpcMaster();
jtabbedPanel.addTab("reg",pnlSpc);
}

我想检查 PNLSpcMaster 的实例,当然我可以通过静态 boolean 值检查,但我认为这种方式更好。

最佳答案

如果你只想拥有一个“PNLSpcMaster”实例,那么你do need a singleton :

这是常见的单例习语:

public class PNLSpcMaster {

/**
* This class attribute will be the only "instance" of this class
* It is private so none can reach it directly.
* And is "static" so it does not need "instances"
*/
private static PNLSpcMaster instance;

/**
* Constructor make private, to enforce the non-instantiation of the
* class. So an invocation to: new PNLSpcMaster() outside of this class
* won't be allowed.
*/
private PNLSpcMaster(){} // avoid instantiation.

/**
* This class method returns the "only" instance available for this class
* If the instance is still null, it gets instantiated.
* Being a class method you can call it from anywhere and it will
* always return the same instance.
*/
public static PNLSpcMaster getInstance() {
if( instance == null ) {
instance = new PNLSpcMaster();
}
return instance;
}
....
}

用法:

private void jButton (java.awt.event.ActionEvent evt) {
// You'll get the "only" instance.
PNLSpcMaster pnlSpc = PNLSpcMaster.getInstace(); //<-- getInstance()
jtabbedPanel.addTab("reg",pnlSpc);
}

或者直接:

private void jButton (java.awt.event.ActionEvent evt) {
jtabbedPanel.addTab("reg",PNLSpcMaster.getInstace());
}

对于基本用法,Singleton Pattern效果很好。然而,对于更复杂的用法,它可能是危险的。

您可以阅读更多相关信息:Why singletons are controversial

关于java - 我怎么知道一个类的实例是否已经存在于内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441984/

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