近来,排查项目代码时,发现一处意外的坑。这个坑感觉很低级,也很奇怪:
在java中声明一个List list,然后用indexOf(object e)进行查找,这时分两种情况:
情况一: 如果传入参数为string类型,则一切正常。能正确找到并返回索引。
情况二: 如果传入参数为integer,运行也一切正常,但是始终返回-1。 最终翻了下函数定义:
int indexOf(Object o);
参数是Object,于是不禁想:如果你没有做严格的类型转换,转换为String,那么你为啥要讲接口参数设计为Object类型呢?
这种情况,我分析应该是当初设计者并没有严格考虑,不同类型的参数装箱后的实际表现,而仅仅是设计一个通用的接口,待以后再补上这个口子,但是到目前为止,这个口子依然存在,而且依然没有人去细究这个设计及所有可能遇到的情况。这或许是java的一个历史遗留问题。