在实际开发中,我们需要通过一个方法根据传入的参数实现一些逻辑,这里我拿我在实际项目中的出现的代码冗余为例。
如图:
只拿这2个方法为例,我除了传递的类不一样外,里面的实现逻辑是一模一样的,这种因为传递一个不同的类而要重新写一个方法的方式,可见是有多么的业余,不仅操作很多的代码重发,而且一旦要是改了逻辑,他要一个一个方法的重新编写,而且好不能保证每个都改对,大家想想是吧。那么这种情况下要如何解决,如何通过一个方法就形式呢?可以通过泛型来解决(这里只是我解决的思路,如果大家有更好的办法,可以在下面评论,一起交流,毕竟我也是业余的)。
public static <T> String templateUseTerm(Class<T> clazz, T cla) {
T u = clazz.cast(cla);
String status = null,start_time = null,end_time = null;
for (Field field : u.getClass().getDeclaredFields()) {
field.setAccessible(true);
try {
if(field.getName().equals("status")){
status = field.get(u)==null?null:String.valueOf(field.get(u));
}else if(field.getName().equals("start_time")){
start_time = field.get(u)==null?null:String.valueOf(field.get(u));
}else if(field.getName().equals("end_time")){
end_time = field.get(u)==null?null:String.valueOf(field.get(u));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
String str="模板状态:";
str += status.equals("0")?"开启;使用周期:":"关闭;使用周期:";
if((start_time == null || "".equals(start_time))
&& (end_time == null || "".equals(end_time))){
str += "永久";
}else if((start_time == null || "".equals(start_time))
&& (end_time != null || !"".equals(end_time))){
str += "于"+end_time + "结束";
}else if((start_time != null || !"".equals(start_time))
&& (end_time == null || "".equals(end_time))){
str += "于"+start_time+ "到永久";
}else if((start_time != null || !"".equals(start_time))
&& (end_time != null || !"".equals(end_time))){
str += start_time + " 至 " + end_time;
}
return str;
}