今天在做软件构造实验------模拟社交图时遇到以下问题:
在网上遍寻无解,无奈只能自己调试。在网上遍寻无解,无奈只能自己调试。
错误信息显示是在第47行,先看这行的代码。这行代码的功能是将Map table里面键为字符串A对应的Set集合复制给Set集合temp。
首先temp.addAll既然是已有的方法,而且IDEA并没有给出报错,说明错误应该不在这里。所以错误应该在addAll的使用方法或者table.get(A)上。
先将table.get(A)单独拎出来,看看是否仍然报错。
并未报错…
难道不是get(A)使用不当?
经过查询资料,get方法返回的是值对应的类型,比如这里返回的是Set类型。一个集合addAll上另一个集合,不应该有错误啊。似乎也不是addAll使用的问题。
此时似乎陷入了僵局…
A Thousand Years Later…
经过大概一个多小时的反复尝试/找其它方法替代,然后在一次偶然,我把对A的操作改成对B 的进行尝试,竟然没有报错!
我们知道,电脑是不应该带着有色眼镜去看变量的,那为什么它偏偏就“歧视”A而偏爱B呢?然后我继续百思不得其解,并且尝试用各种方法把B替换成A然后依旧被报错了将近一小时…
最后发现了罪魁祸首…
原来我为了每次编译运行测试时为了少输入两条语句,给Map中进行了初始化赋值,在这里给键A赋的值是null!!!
所以table.get(A)返回为null,那么,addAll能不能输入null呢?
果然,第37行若是直接给temp加null会报错,也就是说,addAll()括号里面是不能输入null的!所以在我对初始化进行调整以后,终于揪出并修改好了这个可恶的小bug!(__)(笑着哭)
今日知识点:addAll(null)会报错!
null要慎用,可能会导致奇怪的,难以找到的bug导致少摸鱼俩小时…
最好不要偷懒,想偷懒自己去写test…