我必须接管并改进/完善一些代码,将Java对象从第三方库转换为内部对象.目前,这是通过一个大的if-else语句完成的:
if (obj instanceOf X) { //code to initialize internal object } else if (obj instanceOf Y) { //code to initialize different object } else if (obj instanceOf Z) { //more init code } ...
我个人认为这个解决方案并不令人满意; 它变得冗长而混乱,更糟糕的是,许多if-else块包含更多if-else块处理子类和边缘情况.这个问题有更好的解决方案吗?
创建这样的界面
public interface Converter{ public T convert(S source); }
并为X,Y,Z的每个对象实现它.然后将所有已知的转换器放入Map中并开心!