我有一个字符串列表,我有10个独特的方法根据它是什么字符串进行不同的验证。例如,这就是我现在所拥有的:
if(name1 != null){
validateName1();
}
else{
throw Error();
}
if(name2 != null){
validateName2();
}
else{
throw Error();
}
...
所以不要做同样的if-else检查所有不同的方法10次,我希望我可以将名称存储在String列表中,并通过以下方式进行for循环:
List<String> names = new ArrayList<String>();
for(name : names){
if(name != null){
validate[name]();
}
else{
throw Error();
}
请告诉我这是否可行,或者这是一个基本的方法,并且我的问题有一个更优雅的解决方案。重申我的问题基本上我有10个不同的&amp;唯一的验证方法,而不是为每个方法编写if-else,我希望能够通过for循环使用新名称调用这些方法。
提前感谢您的帮助!
答案 0 :(得分:2)
首先,您对每种类型的名称都有不同的验证器。你说你有十个名字:
public interface Name {
}
public class ShortName implements Name {
}
public class LongName implements Name {
}
public class MaidenName implements Name {
}
等等。然后你必须验证一个名字。
public interface Name {
public void validate();
}
这将使您的其他名称抛出编译器错误,因为它们没有setName(...)
方法。所以加上它。
public class ShortName implements Name {
private String name;
public void validate() {
// the first pass at validation
if (name == null) {
throw IllegalStateException("Name cannot be null");
}
// the second pass at validation
if ("".equals(name)) {
throw IllegalStateException("Name has a zero length");
}
// ok, the name is valid
}
}
一旦你为每个名字都有其中一个名字,你现在可以这样做。
List<Name> names = getNames();
for (Name name : names) {
names.validate();
}
并且名称的每个类型将运行它的唯一验证器。