Java List<String> IndexOf(object e)坑

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

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

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

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

int indexOf(Object o);

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

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

posted @ 2021-11-15 14:25  Shapley  阅读(524)  评论(0编辑  收藏  举报