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

时间:2014-03-19 05:24:40

标签: java eclipse jar

我创建单例类并在不同的类中使用此类对象,此代码在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列表将为空我不知道为什么如果有任何身体知道比帮助我 提前致谢

1 个答案:

答案 0 :(得分:0)

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

另外,静态单身人士很难做到正确,一般应该避免(couple good reasons)。在您的具体情况中,不仅PointCalculate类不是线程安全的,而且它还将calPoint暴露给整个世界。因此,任何人都可以运行以下代码并基本上覆盖您的实例。

  

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