Java使用lambda且未显式指明lambda类型时,调用参数为callable与runnable的重载函数时可能存在坑,例子如下,基于jdk-11.0.1
1 | static int b(Callable<?> c) { |
如果没有int b(Callable<?> c)
函数,那么肯定是调用void b(Runnable r)
函数,而如果有int b(Callable<?> c)
函数,默认是调用int b(Callable<?> c)
函数。
从而如果一个lib第一版只有runnable
的版本,并且第二版增加了callable
的版本,而客户在第一版时这样去使用,就会导致,客户升级版本时,很难得知所调用的函数发生了变化,从而容易导致bug。
v1.5.2