gpt4 book ai didi

java - 如何在我自己的类中处理 null 以避免 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 09:44:37 26 4
gpt4 key购买 nike

我正在尝试为我的 LinkedList 构建一个类作为练习,因为我之前已经在 python 中解决过它,我知道我可以轻松地以递归方式设置一个方法来检查两个链表是否相等:

class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
}

public boolean equals(ListNode other) {
if (this == null && other == null) {
return true;
} else if (this == null || other == null) {
return false;
} else {
return this.val == other.val && this.next.equals(other.next);
}
}

但是,由于这在 python 中可以正常工作,因此在 java 中不起作用(我得到 NullPointerException ),这并不奇怪,因为我需要处理 node.next 时的情况。是 null ,然后null.equals(other)无法执行为null没有方法equals :

所以我想出了一个可以工作的静态方法,但我不太喜欢它。

public static boolean equals(ListNode self, ListNode other) {
if (self == null && other == null) {
return true;
} else if (self == null || other == null) {
return false;
} else {
return self.val == other.val && equals(self.next, other.next);
}
}

我想知道是否有更好的方法来处理这种常见情况?

好吧,我想了一下,我可以通过先检查下一个值来保持非静态:

public boolean equals(ListNode other) {
if (this.next == null && other.next == null) {
return this.val == other.val;
} else if (this.next == null || other.next == null) {
return false;
} else {
return this.val == other.val && this.next.equals(other.next);
}
}

这是一个好方法吗?

最佳答案

I am wondering if there is a better way to handle such common situation?

您可以将代码放入 try-catch block 中,如下所示,

public boolean equals(ListNode other) {
try {
if (this == null && other == null) {
return true;
} else if (this == null || other == null) {
return false;
} else {
return this.val == other.val && this.next.equals(other.next);
}
} catch (Exception ex) {
/* Handle Exception */
return false;
}
}

或者,您可以简单地处理 node.next 可以为 null 的情况,

public boolean equals(ListNode other) {
if (this == null && other == null) {
return true;
} else if (this == null || other == null) {
return false;
} else if (this.next != null) {
return this.val == other.val && this.next.equals(other.next);
}
return false;
}

关于java - 如何在我自己的类中处理 null 以避免 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759952/

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