我正在为一家金融公司提供后端服务。这个应用程序是使用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的 null 值
public class B extends MsgHandler
{
useData()
{
System.out.println("Mobile Txn Id: "+mobileTxnId) //its not printing the values here
}
}
为什么会发生这种情况,因为我正在扩展同一个类,但是在A类中,我得到了mobileTxnId但是在B类中,我得到了mobileTxnId的空值。
使 mobileTxnId 静态是一个好习惯,即使该应用程序将在多线程环境中使用,请建议我
答案 0 :(得分:2)
a
和b
不相同的对象,因此在setAllData()
对象构造函数上调用a
也不会调用b
对象构造函数。
您需要致电
b.setAllData()
之前使用
b.useData()
答案 1 :(得分:0)
尝试在b.setAllData()
之前调用b.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
}
如果这不是您问题的答案,请尝试制定另一个问题。可能是你实际上要求完全不同的东西(即访问扩展相同类的其他类的值/方法等)