我正在针对图书馆进行编程。
在版本 1 中,该库有一个 getFoo() 方法,它返回一个 Map
在版本 2 中,该方法 getFoo() 现在返回一个 Set
我以为我的代码可以愉快地:
Object foo = library.getFoo();
并且无论库返回 Map 还是 Set 都可以工作。
但是,当我针对库的版本 1 编译我的代码,但针对版本 2 运行它时,我得到 java.lang.NoSuchMethodError: getFoo()Ljava/util/Map;
至少那是发生的事情
java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-0ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
我现在已经通过使用反射解决了这个问题,但我认为这没有必要。
所以我的问题是,执行 Object foo = library.getFoo() 是否安全,如果答案是“有时”或“取决于”,那么为什么在这种情况下不可行?