java - 数组中空指针异常的Java错误处理
问题描述
抱歉,如果这是一个重复的问题,我进行了一些搜索,但找不到我的具体情况。
我想知道如果在 ArrayList 的索引中找不到解析的 ID,我是否可以就处理空异常错误的最佳方法获得一些建议,这些函数尝试通过 ID 从 ArrayList 返回对象。
我有一个包含 Task 对象的 ArrayList 的 Project 类:
private ArrayList<Task> tasks = new ArrayList<Task>();
我在 Project 类中有一个获取函数来尝试通过它的 ID 从 ArrayList 返回一个任务:
public Task getTask(int id) {
if(id > 0 && id <= tasks.size()) {
for(Task task : tasks) {
if(task.getID() == id) {
return task;
}
}
} else {
Globals.log("Couldt find Task with ID of: " + id + " in Project: " + title);
}
return null;
}
当我尝试通过从 ID 获取任务来调用任务中的函数时,如果任务 ID 在 ArrayList 的索引中不存在,我自然会收到空异常错误,例如,如果没有 ID 为的任务15,此代码将失败并返回空异常指针:
project.getTask(15).addTag("Test");
我的问题是,我可以在getTask(int id)
函数中进行一些错误处理以在程序崩溃之前记录错误吗?
我尝试在它周围添加一个块,但它在崩溃之前try {} catch {}
仍然没有运行我的函数。Globals.log()
try {} catch {}
如果我在 Task 类的函数中进行错误处理,则添加一个
块addTag();
是可行的,但我宁愿不必遍历 Task 类中的所有函数并添加try {} catch {}
到每个函数中。
这个问题有更好的解决方案吗?
解决方案
从 java 8 开始,如果数组返回中存在,则可以Optional
用作返回类型,否则为空Task
Optional
Task
Optional
public Optional<Task> getTask(int id) {
if(id > 0 && id <= tasks.size()) {
for(Task task : tasks) {
if(task.getID() == id) {
return Optional.of(task);
}
}
}
Globals.log("Couldt find Task with ID of: " + id + " in Project: " + title);
return Optional.empty();
}
从可选中,您可以ifPresent
通过避免try-catch
和null
检查来使用
project.getTask(15).ifPresent(t->t.addTag("test"));
推荐阅读
- android - 尝试在 onDestoryView() 之外保留 Fragment 视图的引用时发生内存泄漏
- python - 一个简单的单层感知器实现,用于具有 sigmoid 激活函数的二进制分类
- c# - 如何统一为不同的屏幕尺寸设置基于购物的 UI?
- python - 熊猫映射到数组字典
- rest - 使用 Bitbucket REST API 时出现 curl 错误
- c# - EF Core 更新导航属性但 FK 隐藏属性未更新
- html - HTML&CSS + Twitter Bootstrap:左侧的任何表单元素和右侧的按钮(行部分)
- httpclientfactory - 在 .Net Core 2.1 类库中使用 HttpClientFactory
- c++ - gtk_text_buffer_create_tag 创建警告:“GtkTextTag”没有名为“\u0004”的属性
- javascript - VueJS多个嵌套路由不由路由器视图呈现