这个里面的 getAttr当不使用 toString() 方法的时候,一直报错 java.lang.String cannot be cast to [Ljava.lang.Object;
我看了下,getAttr返回的是<T>object ,这个为什么非要toString()一下呢?
也就是说要同时满足下面几个条件才会出现:
1:JDK 版本是 8 或更高
2:方法原型中带有一个 Object... paras 参数
3:传入参数时是方法调用,例如 record.get("title")、getAttr(...) 等等
4:第三条中的方法调用的返回值类型是泛型,例如上面的 record.get(...) 与 getAttr(...) 返回值类型都是泛型
解决办法极其简单,下面的方法任选其一:
1:使用强制类型转换,例如:findFirst(..., (Object)getAttr(...));
2:引入一个中间变量,例如:
Object para = getAttr(...);
findFirst(..., para);
解决方案都是为了消除 JDK 8 的 Object... 传参类型错误的问题,低版本 JDK 没有这个问题。
高版本的 JDK 或许是为了提升性能才有了这个变化