首页 > 解决方案 > 无法在类外访问正确的类对象

问题描述

我有一个包含我已经声明为静态易失性的类,因为我想让不同的类访问它的同一个实例。当类被实例化时,我认为它会创建我的 hashmap 的一个实例,但显然它已经创建了 2 个实例。

第一类:

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;
}

Class 2 // 调用类

public class GetFlightThread extends Thread {

@Override
public void run() {

    String ref;
    FlightMap fm = new FlightMap();
    int size=0;

    size = fm.GetSize();
}

当我查看 Class 1 内的调试器时,有 2 个“flight_hm”实例,一个大小为零且是静态的,另一个是 null 且非静态的。Class 2 中的“size”变量为空,因此显然 Class 2 正在访问非静态实例。如何仅创建 1 个“fm”实例?

标签: javastatic

解决方案


HashMap<String, Flight> flight_hm = new HashMap<>();

↑ 这是声明一个局部变量并分配给该局部变量。这个局部变量掩盖了static你在类级别上的变量。

当你声明一个静态变量时,你会希望在声明它的同一行初始化它,如下所示:

private static volatile HashMap<String, Flight> flight_hm = new HashMap<>();

推荐阅读