gpt4 book ai didi

java - 数组中空指针异常的Java错误处理

转载 作者:行者123 更新时间:2023-12-03 07:46:30 24 4
gpt4 key购买 nike

抱歉,如果这是一个重复的问题,我进行了一些搜索,但找不到我的特定情况。

我想知道是否可以通过一些函数尝试最好的方法来处理空异常错误,如果在ArrayList的索引中找不到解析的ID,该函数会尝试通过ID从ArrayList返回对象。

我有一个Project类,其中包含Task对象的ArrayList:

private ArrayList<Task> tasks = new ArrayList<Task>();

我在Project类中有一个geting函数,尝试通过ArrayList的ID返回一个Task:
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获取任务来调用Task中的函数时,如果ArrayList的索引中不存在Tasks ID,则自然会出现空异常错误,例如,如果没有ID为15,此代码将失败,并带有null异常指针:
project.getTask(15).addTag("Test");

我的问题是,我可以在 getTask(int id)函数中进行一些错误处理以在程序崩溃之前记录该错误吗?

我尝试在其周围添加一个 try {} catch {}块,但是在崩溃之前它仍然没有运行我的 Globals.log()函数。

添加一个
如果我在Task类的 try {} catch {}函数中执行错误处理, addTag();块将起作用,但是我宁愿不必遍历Task类中的所有函数并将 try {} catch {}添加到每个函数中。

有没有更好的解决方案来解决这个问题?

最佳答案

在Java 8中,如果数组中存在Optional,则可以使用Task作为返回类型。

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

Optional中,您可以通过避免 OptionalTask检查来使用 Optional
project.getTask(15).ifPresent(t->t.addTag("test"));

关于java - 数组中空指针异常的Java错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60087658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com