Java--contains方法

  来源于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

 

posted @ 2013-04-04 00:03  ttang  阅读(21261)  评论(0编辑  收藏  举报