java - Java - 方法调用“添加”将产生“NullPointerException”
问题描述
我正在尝试读取我正在制作的基本文本游戏的 JSON 文件,但是当我尝试将 JSON 转换为 POJO 时收到警告。我的 Json 如下所示:
{ "rooms": [
{
"roomCoordinates": [0, 0],
"availableDoors": ["east"],
"unavailableDoors": [],
"items": []
}
]
}
我的 Room 对象和包装类如下所示:
import java.util.ArrayList;
public class Room {
private int[] roomCoordinates;
private ArrayList<String> availableDoors;
private ArrayList<String> unavailableDoors;
private ArrayList<String> items;
public Room(int[] currentRoomCoordinates, ArrayList<String> currentAvailableDoors,
ArrayList<String> currentUnavailableDoors, ArrayList<String> currentItems){
this.roomCoordinates = currentRoomCoordinates;
this.availableDoors = currentAvailableDoors;
this.availableDoors = currentUnavailableDoors;
this.items = currentItems;
}
public int[] getRoomCoordinates(){
return roomCoordinates;
}
public ArrayList<String> getAvailableDoors(){
return availableDoors;
}
public ArrayList<String> ungetAvailableDoors(){
return unavailableDoors;
}
public ArrayList<String> getItems(){
return items;
}
}
public class GameBoard {
private List<Room> gameBoard = new ArrayList<>();
public GameBoard(int[] roomCoordinates, ArrayList<String> availableDoors,
ArrayList<String> unavailableDoors, ArrayList<String> items){
gameBoard.add(new Room(roomCoordinates, availableDoors, unavailableDoors, items));
System.out.println(gameBoard);
}
public Room getRoom(int i){
return gameBoard.get(i);
}
public List<Room> getGameBoard(){
return gameBoard;
}
}
我实际运行来初始化它的代码如下:
@Test
public void setUp() {
try {
Gson gson = new Gson();
Reader reader = Files.newBufferedReader(Paths.get("src/main/java/student/adventure/Rooms.json"));
GameBoard board = gson.fromJson(reader, GameBoard.class);
reader.close();
System.out.println(board.getGameBoard());
Room room = board.getRoom(0);
} catch (NullPointerException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
我在 GameBoard 构造函数中收到一条警告,说“方法调用 'add' 将产生 'NullPointerException'”。当我查看实际的游戏板列表时,我发现它是空的,我确信它与警告有关。现在有人为什么在构造函数中调用警告吗?
解决方案
GameBoard 应初始化为:
private List<Room> gameBoard = new ArrayList<>();
而且此文件路径可能不是您要获取的确切路径。尝试确保您正在阅读确切的文件位置。
Reader reader = Files.newBufferedReader(Paths.get("src/main/java/student/adventure/Rooms.json"));
推荐阅读
- rust - 如何为我的自定义结构(链表)实现复制特征以及如何在一个函数调用中循环链表
- java - 将带有前导特殊字符的字符串转换为双精度?
- haskell - 将 GADT 与 DataKinds 一起用于函数中的类型级数据构造函数约束
- connection - 德州仪器 DCA1000 雷达问题
- angular - 自定义 ErrorHandler 提供程序为响应异步事件而打开的对话框未关闭
- sql - Presto - 使用数组的每个索引将 2 个数组转换为单独的映射实体
- angular - AngularFire2 Microsoft Auth 提供 POST https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion 400
- c# - 查询一对一关系
- r - 对于在数据帧中创建新变量的循环,在 R 中运行多个数据帧
- mysql - 如何使用 docker-compose 将 csv 加载到 mysql 中?