java - 支持代码向后兼容
问题描述
我有一个模型(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;
}
}
这是正确的处理方式吗?有没有更好的方法来做到这一点?
谢谢。