我必须接管并改进/完善一些代码,将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
}
...
Run Code Online (Sandbox Code Playgroud)
我个人认为这个解决方案并不令人满意; 它变得冗长而混乱,更糟糕的是,许多if-else块包含更多if-else块处理子类和边缘情况.这个问题有更好的解决方案吗?
创建这样的界面
public interface Converter<S,T> {
public T convert(S source);
}
Run Code Online (Sandbox Code Playgroud)
并为X,Y,Z的每个对象实现它.然后将所有已知的转换器放入Map中并开心!