gpt4 book ai didi

java - 抛出空指针异常

转载 作者:行者123 更新时间:2023-12-01 07:38:16 25 4
gpt4 key购买 nike

我正在 android 中做一个应用程序,因为我需要访问 com.android.internal.telephony API。现在我可以访问这些 API,但问题是无论我在自己的类中调用 Class Call.java 的 getEarliestConnection() 方法,它都会抛出 NullPointerException。你可以在这里找到 Call.java http://hi-android.info/src/com/android/internal/telephony/Call.java.html 。该类中有以下方法:

1.    public Connection
2. getEarliestConnection() {
3. List l;
4. long time = Long.MAX_VALUE;
5. Connection c;
6. Connection earliest = null;
7.
8. l = getConnections();
9.
10. if (l.size() == 0) {
11. return null;
12. }

for (int i = 0, s = l.size() ; i < s ; i++) {
c = (Connection) l.get(i);
long t;

t = c.getCreateTime();

if (t < time) {
earliest = c;
time = t;
}
}

return earliest;
}

我想在我的类(class)中调用这个方法。 Call.java 类是一个抽象类,我创建了 Call 类的子类,并像这样调用了上面的方法:

Call myCall = new MyCall();
Connection myConn = new MyConn();
myConn = myCall.getEarliestConnection();

但是它在上述方法的第 10 行和上述代码的第 3 行抛出一个 NullPointerException

最佳答案

大概getConnections()返回 null,因此 l为空,因此尝试调用 l.size()正在抛出异常。我们不知道什么getConnections()但确实如此。

请注意,这看起来也很可疑:

Connection myConn = new MyConn();
myConn = myCall.getEarliestConnection();

为什么要创建 MyConn 的实例在第一行,只是为了再次扔掉它?为什么不直接使用:

Connection myConn = myCall.getEarliestConnection();

一般来说,尽可能晚地声明局部变量是值得的,最好是当您有有用的值时 - 因此在您的方法中,您可以声明 c 循环内,分配 t声明中的值,声明 l您还应该考虑在可能的情况下使用泛型 - 例如List<MyConn>而不仅仅是原始的 List类型。

编辑:与已接受的答案相反,我建议更改 getConnections() 始终返回一个非空值,如果没有连接则返回一个空列表。这将更容易使用。

关于java - 抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8741215/

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