0

我正在为一家金融公司提供后端服务。此应用程序是使用 jpos、spring 3.0.5、hibernate 3.6 构建的。此应用程序将在 jpos 负责的多线程环境中运行。但是,我在应该使用哪种策略来定义可以在整个应用程序中访问的属性和数据成员的类之间感到困惑。

到目前为止,我所做的是:

public class MsgHandler 
{

    public Boolean isOffline = true;
    public Boolean isSuccess;
    public Long mobileTxnId;

    setAllData()
    {
        mobileTxnId=1000;
        ..............
    }
}

基本上,在这门课中,我曾经把我在整个过程中经常使用的所有必要数据都放在了上面。所以我扩展了MsgHandler

public class A extends MsgHandler 
{

    setAllData();
    System.out.println("Mobile Txn Id: "+mobileTxnId) //its printing the values here
    B b=new B();
    b.useData();
}

现在另一个类 B也在扩展 MsgHandler 类,但是在类 BI 中没有得到在类 A中设置的 mobileTxnId 的

public class B extends MsgHandler 
{
    useData()
    {
        System.out.println("Mobile Txn Id: "+mobileTxnId) //its not printing the  values here
    }
}

为什么会发生这种情况,因为我正在扩展同一个类,但是在 A 类中,我得到了 mobileTxnId,但在 B 类中,我得到了 mobileTxnId 的空值。

mobileTxnId设为静态是一个好习惯,即使应用程序要在多线程环境中使用,请建议我

4

2 回答 2

2

a并且b不是相同的对象,因此调用对象构造函数不会setAllData()对象构造函数中进行调用。ab

你需要打电话

b.setAllData()

在你使用之前

b.useData()
于 2013-05-13T13:37:58.837 回答
0

尝试在类的初始化块中调用b.setAllData()beforeb.useData()或调用。setAllData()B

所以:

public class A extends MsgHandler {
{
   setAllData();
   System.out.println("Mobile Txn Id: "+mobileTxnId) //its printing the values here
   B b=new B();
   b.setAllData(); //see what I did here
   b.useData();
}

或者:

public class B extends MsgHandler {
{
   setAllData(); //see what I did here
   System.out.println("Mobile Txn Id: "+mobileTxnId) //its not printing the  values here
}

如果这不是您问题的答案,请尝试制定不同的答案。可能是您实际上要求的是完全不同的东西(即访问另一个扩展相同的类的值/方法等)

于 2013-05-13T13:38:21.777 回答