gpt4 book ai didi

java - 单例对象在 jar 中销毁但在 eclipse 中工作

转载 作者:行者123 更新时间:2023-12-05 00:07:22 24 4
gpt4 key购买 nike

我制作单例类并在不同的类中使用此类对象此代码在 Eclipse 中工作正常但是当我制作可运行的 jar 而不是它采用空的 hashmap 列表时,我不知道为什么我的代码......

我的单例类

public class PointCalculate {

public HashMap<String, Float> calPoint;
private static PointCalculate instance;

private PointCalculate(){
calPoint = new HashMap<String, Float>();
}

public static PointCalculate getInstance(){
if(instance==null){
instance = new PointCalculate();
}
return instance;
}

public void calculatePoint(String uid ,float point){

Float ps = instance.calPoint.get(uid);
if(ps==null) {
ps = point;
instance.calPoint.put(uid, ps);
}
else {
ps = point+ps.floatValue();
instance.calPoint.put(uid, ps);
}
}
}

我正在传递下面这个类的值....

  public class Exp {

public void setpoint(){
PointCalculate obj = PointCalculate.getInstance();
obj.calculatePoint(rowkey, point);//rowkey and point come from file.....
}
}

现在我正在传递 hashmap....

  public static void main(String args[]) throws Exception {
PointCalculate obj = PointCalculate.getInstance();
SqlInsertPoint.givePoint(obj.calPoint);
}

但是在 SqlInsertPoint.givePoint() 中 HashMap 列表将是空的我不知道为什么如果有人知道而不是帮助我提前致谢

最佳答案

这段代码有什么问题?在 main 中,您获得了一个 PointCalculate 实例,不将任何点放入其中,并将其传递给 givePoint 方法。由于您没有填充 HashMap,因此它应该是空的。

在一个单独的说明中,静态单例很难正确处理,通常应避免使用 ( couple good reasons )。在您的具体情况下,不仅 PointCalculate 类不是线程安全的,而且它还向全世界公开了 calPoint 。因此,任何人都可以运行以下代码并从根本上覆盖您的实例。

PointCalculate.getInstance().calPoint = new HashMap();

关于java - 单例对象在 jar 中销毁但在 eclipse 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22496964/

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