我有一个字符串列表,我有 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/