如何使用for循环来更改方法名称

时间:2014-08-08 22:57:33

标签: java

我有一个字符串列表,我有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循环使用新名称调用这些方法。

提前感谢您的帮助!

1 个答案:

答案 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();
}

并且名称的每个类型将运行它的唯一验证器。