【发布时间】:2021-07-08 11:03:46
【问题描述】:
上下文
我正在使用非常相似的课程,例如 RechargeResponse 或 ConsultResponse。所有这些(大约 80 个)都是从 WSDL 方案生成的,具有相同的结构。 (这个方案来自3PP公司,这个逻辑我改不了。)
每个都包含内部类:RechargeResult 和 ConsultResult。
我有一堆具有相同功能的方法。唯一的区别是我需要致电(例如)response.get_ClassName_Result().getAny() 来检查数据。
问题
如何避免在每个方法中使用相同的代码而只更改了 ClassNameMethod?
是否可以使用泛型、反射或其他解决方案? (我认为像字符串一样解析类名不是解决方案)。
以下代码示例:
类似的类:
public class ConsultResponse {
protected ConsultResult consultResult;
public ConsultResult getConsultResult() {
return consultResult;
}
public static class ConsultResult {
protected Object any;
public Object getAny() {
return any;
}
public void setAny(Object value) {
this.any = value;
}
}
}
public class RechargeResponse {
protected RechargeResult rechargeResult;
public RechargeResult getRechargeResult() {
return rechargeResult;
}
public static class RechargeResult {
protected Object any;
public Object getAny() {
return any;
}
public void setAny(Object value) {
this.any = value;
}
}
}
每个类的相似(重复)方法:
private void validateConsult(ConsultResponse response) {
if (response == null ||
response.getConsultResult() == null || // need solution here
response.getConsultResult().getAny() == null) { // need solution or change here
throw new Exception();
}
}
【问题讨论】:
-
我不明白的是:你的两个内部类都是静态的......那么首先拥有两个不同的内部类有什么意义呢?是什么阻止了具有基本实现的外部独立基类?如果您的内部类实际上做了不同的事情,那么您的示例应该表明这一点。
-
这不是我的解决方案。这些类来自外部 API,由 WSDL 方案生成。我需要实现我的逻辑来提取数据。所以我正在尝试为 validateConsult 方法找到一个解决方案,以便不创建一堆类似的方法。
-
那我不明白你的问题。代码生成了,又不能改,怎么帮忙???
-
抱歉造成混淆,我需要通过 ClassName 的模式来提取调用类似方法的数据。您对解决方案的评论很好,但这会吸引第三方更改许多课程(大约 80 个)。之后,如果他们决定进行小的更改,我所有的工作都将被删除。所以这就是为什么我需要找到解决方案——通过ClassName的模式来提取调用类似方法的数据。希望现在更清楚了。
标签: java code-duplication