首页 > 解决方案 > 支持代码向后兼容

问题描述

我有一个模型(dto)v1

SampleDto {
instVar1 
instVar2 
setters / getters 
}

该模型将作为模块部署在 jboss 中,作为某些服务的一部分。我需要调用这个模型来构建我的应用程序,这个模型是我构建应用程序的编译时依赖项。

现在我的应用程序向后兼容以下场景:添加了一个新的成员变量说 instVar3(现在模型版本是 v2);我的应用程序使用新模型 v2 作为编译时依赖项;如果我的应用程序在运行时在模型 v1 上运行,如何避免 nosuchmethodfound 错误。

为了处理这个问题,我使用反射 API 来检查 SampleDto 中是否支持特定的方法/字段,如果支持,则使用该方法,否则不使用。

final List<Method> methods = new ArrayList<Method>(Arrays.asList(SampleDto.class.getDeclaredMethods()));
for(Method method : methods){
    if (method.toString().contains(methodToFind)){
        log.debug("method supported at runtime - SampleDto");
        SampleDto.newSetter(....);
        break;
    }
}

这是正确的处理方式吗?有没有更好的方法来做到这一点?

谢谢。

标签: java

解决方案


推荐阅读