来源于contains方法,因为它接受object作为参数,太宽松了,以至于不小心写错后,eclipse都无法提供错误提示,而且这种错误不会有异常,运行时也不会因错误而中断,是纯粹语义上的错误,这种错误在我看来是最可怕的。

  讲一下我的这个错误。

  我有一个HashSet<Integer> A;用来记录那些曾经被插入队列的节点(Vertex),对于一个新来的节点,如果不在A中,就插入队列。后来我发现这个队列无限制增长,折腾很久发现原因是这样的:

while(!queue.isEmpty()){
   if(A.contains(node)){
      continue; 
   }
   if(XXX)
      A.add(node.getId());
      queue.add(node.getId());
   }
}

即插入A的是node的id,而检查时却检查了node本身,所以那个contains检查根本无效,但是eclipse不会告诉你这里有错误,警告也没有

虽然这里似乎很容易看到contains和add的不一致,但是原来这两句距离很远,使得很难发现这个bug

 

相关文章:

  • 2022-01-08
  • 2021-06-27
  • 2021-09-20
  • 2022-12-23
  • 2021-12-17
  • 2021-10-09
  • 2021-10-09
猜你喜欢
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案