java - 如何使用for循环改变方法名

标签 java

我有一个字符串列表,我有 10 个独特的方法根据它是什么字符串进行不同的验证。例如,这就是我现在拥有的:

if(name1 != null){
  validateName1();
}
else{
  throw Error();
}

 if(name2 != null){
  validateName2();
}
else{
  throw Error();
}
...

因此,我希望我可以将名称存储在一个字符串列表中,并让一个 for 循环以下列方式遍历它,而不是对所有不同的方法执行相同的 if-else 检查 10 次:

List<String> names = new ArrayList<String>();
for(name : names){
   if(name != null){
     validate[name]();
   }
   else{
     throw Error();
   }

请让我知道这是否可行,或者这是一个基本的方法并且有更优雅的解决方案来解决我的问题。重申一下我的问题基本上是我有 10 个不同且独特的验证方法,而不是为每个方法编写 if-else,我希望能够通过 for 循环以使用新名称调用这些方法。

在此先感谢您的帮助!

最佳答案

首先,每种类型的名称都有不同的 validator 。你说你有十个名字:

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

并且每个类型的名称都将运行其唯一的 validator 。

关于java - 如何使用for循环改变方法名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213416/

相关文章:

java - 使用 Java 8 在文件中查找模式

java - 使用 Eclipse 编辑器出现 FileNotFoundException

java - Java REST 的正确心跳/保持 Activity 技术/层是什么? http? TCP?编码: chunked?

java - 如何获取捕获的图像的URL?

java - Tomcat 7 Liferay 6.2 关于损坏数据库的奇怪错误

java - Freemarker 迭代对象的 ArrayList 并访问变量?

java - 设计应用程序和 GUI 之间的接口(interface)

java - 我如何改进 Map<Integer, Map<Integer, Map<PAXType, BigDecimal>>> 使用 Guava

java - "Fatal error"在 Sikuli 中,libs 目录不在系统路径上

java - Android Wear 上的奇怪渲染问题