java - 无法在类外访问正确的类对象
问题描述
我有一个包含我已经声明为静态易失性的类,因为我想让不同的类访问它的同一个实例。当类被实例化时,我认为它会创建我的 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”实例?
解决方案
HashMap<String, Flight> flight_hm = new HashMap<>();
↑ 这是声明一个局部变量并分配给该局部变量。这个局部变量掩盖了static
你在类级别上的变量。
当你声明一个静态变量时,你会希望在声明它的同一行初始化它,如下所示:
private static volatile HashMap<String, Flight> flight_hm = new HashMap<>();
推荐阅读
- python - 具有不同形状的 Numpy 数组 concat
- javascript - fetch可以用来替换整个文档或者html元素吗?
- angular - ngIf 只隐藏 div 但它会影响布局?
- javascript - 使用传播或解构获取反应状态对象
- flutter - Flutter - 可扩展文本无法与溢出属性一起正常工作
- javascript - 如何在 TypeScript 中为模板定义类型?
- docusignapi - 可以使抄送收件人可以查看文本选项卡吗?
- python - 了解 Django Rest Framework 的 ModelViewSet 路由器
- swift - 使用 UIHostingController 在其 addSubview 中访问 ViewController 的数据
- html - angular : 将输入值传递给组件