[英]Can't access correct class object outside of class
我有一个包含已声明为static volatile的类,因为我想让不同的类访问它的相同实例。 当实例化该类时,我认为它将创建我的哈希图的一个实例,但是显然它已经创建了2个实例。
第1类:
public class FlightMap {
private Flight flight;
private static volatile HashMap<String, Flight> flight_hm;
public FlightMap() {
flight = new Flight();
HashMap<String, Flight> flight_hm = new HashMap<>();
}
public int GetSize() {
int size = flight_hm.size();
return size;
}
第2类//通话类
public class GetFlightThread extends Thread {
@Override
public void run() {
String ref;
FlightMap fm = new FlightMap();
int size=0;
size = fm.GetSize();
}
当我在类1的调试器中查看时,有2个“ flight_hm”实例,一个实例的大小为零且为静态,而另一个为null且为非静态。 类2中的“ size”变量为null,因此显然类2正在访问非静态实例。 如何仅创建1个“ fm”实例?
HashMap<String, Flight> flight_hm = new HashMap<>();
↑这是声明一个局部变量并分配给该局部变量。 此局部变量掩盖了您在类级别上具有的static
变量。
声明静态变量时,将需要在声明的同一行对其进行初始化,如下所示:
private static volatile HashMap<String, Flight> flight_hm = new HashMap<>();
在类构造函数中声明的局部变量flight_hm
和您的静态变量flight_hm
是两个不同的变量。 因此,这里发生的基本上是您声明了静态变量,但没有对其进行初始化,并且还在构造函数中声明并初始化了局部变量。 考虑将来this
关键字作为一种良好做法,以免发生此类错误。
public class FlightMap {
private Flight flight;
private static volatile HashMap<String, Flight> flight_hm = new HashMap<>();
public FlightMap() {
flight = new Flight();
}
public int GetSize() {
int size = this.flight_hm.size();
return size;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.