Java List<String> IndexOf(object e)坑

近来,排查项目代码时,发现一处意外的坑。这个坑感觉很低级,也很奇怪:

在java中声明一个List list,然后用indexOf(object e)进行查找,这时分两种情况:

情况一: 如果传入参数为string类型,则一切正常。能正确找到并返回索引。

情况二: 如果传入参数为integer,运行也一切正常,但是始终返回-1。 最终翻了下函数定义:

int indexOf(Object o);

参数是Object,于是不禁想:如果你没有做严格的类型转换,转换为String,那么你为啥要讲接口参数设计为Object类型呢?

这种情况,我分析应该是当初设计者并没有严格考虑,不同类型的参数装箱后的实际表现,而仅仅是设计一个通用的接口,待以后再补上这个口子,但是到目前为止,这个口子依然存在,而且依然没有人去细究这个设计及所有可能遇到的情况。这或许是java的一个历史遗留问题。

文章出处:www.cnblogs.com/jizhong

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/jizhong/p/15556191.html