我正在寻找一种设计模式,甚至是关于我前几天看到的一些代码的建议。一般结构是这样的(伪代码):
public String getUrl(){
Person person= new Person();
StringBuilder builder = new StringBuilder();
if(person.getName() != null){
builder.append(",_name=");
builder.append(person.getName());
}
if(person.getLastName() != null){
builder.append(",_lastName=");
builder.append(person.getName());
}
if(person.getPostCode() != null){
builder.append(",_postCode=");
builder.append(person.getPostCode());
}
// So on and so forth
return builder.toString();
}
现在的问题是我无法控制 Person 类(我只是通过 API 调用获得它)。我正在考虑使用反射和这样的地图:
Map<String, String> methodNameToUrlParameter; //Pre Build this map with method name and the actual parameter key
Map<String, String> urlParameterToValue;
Method[] methods = person.getMethods();
for(Method method: methods ){
String result = (String) method.invoke(person, null);
if(result != null){
String urlParam = methodNameToUrlParameter.get(method.getName());
urlToValue.put(urlParam, result );
}
}
然后我可以继续我的快乐之路。但这对我来说似乎不太好,我对反射也不太了解,有什么想法吗?请记住,我无法控制 Person 类,它只有 getter,因为它是不可变的。
谢谢。
编辑:
我要问的是有没有更好的方法来表示这里的逻辑流,而无需使用太多执行空值检查的 if 语句。也许是我不知道的设计模式。
第二次编辑:可能有 20 个 if-null 检查,这让事情变得丑陋。有没有办法做到这一点?