加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在方法调用链中查找null

发布时间:2020-12-14 19:17:49 所属栏目:Java 来源:网络整理
导读:我正在寻找一种快速的方法来确定chain的哪一部分为空. 举例说明这一点: public class Chain { private Chain chain; public Chain returnChain() { return chain; } public void addChain(Chain chain) { this.chain=chain; } public String toString() { r

我正在寻找一种快速的方法来确定chain的哪一部分为空.

举例说明这一点:

public class Chain {
    private Chain chain;

    public Chain returnChain() {
        return chain;
    }

    public void addChain(Chain chain) {
        this.chain=chain;
    }

    public String toString() {
        return "Hello!";
    }

    public static void main(String[] args) {
        Chain c1 = new Chain();
        c1.addChain(new Chain());

        System.out.println(c1.returnChain().returnChain().returnChain().returnChain());
    }
}

这显然会抛出NullPointerException. (我知道如何更改代码以明确链接的哪一部分抛出NullPointerException,但我想用现有代码来解决这个问题.)

最佳答案
在典型NPE的堆栈跟踪中,您将获得它所发生的行号.假设System.out.println(c1.returnChain().returnChain().returnChain().returnChain());在第144行(只是随机选取)你的NPE堆栈跟踪应该类似于:

java.lang.NullPointerException
  at your.package.Chain(Chain.java:144)

因此,如果您将链调用放在多行上,它应该显示异常的位置.

我写了这个小例子:

package bla;

public class Something {
    public static int count = 0;
    public Something get() {
        if(count == 2) {
            return null;
        }
        ++count;
        return new Something();
    }

    public static void main(String[] args){
        Something something = new Something();
        Something test = something.get()
                                .get()
                                    .get()
                                        .get() // Should throw NPE
                                            .get()
                                                .get();
    }
}

它给了我NPE说:在bla.Something.main(Something.java:18) – 确切地说NPE在链中发生的地方.

屏幕截图……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读