Java 如何以较少的重复调用set方法。(爪哇)

Java 如何以较少的重复调用set方法。(爪哇),java,syntax,Java,Syntax,您好,我为我正在制作的一个程序提供了一组do-while语句,每个语句都在另一个类中定义了一个不同的setMethod,但是我想用一种更简洁的方式来实现这一点。我想知道某种循环是否能做到这一点。或者如果你可以有一个setMethod数组。或者任何可以使代码紧凑的东西 参赛者1是类参赛者信息的对象,其中包含每个字段的设置方法 如果您使用的是Java 8,则可以执行以下操作: List<String> labels = Arrays.asList( "Please enter y

您好,我为我正在制作的一个程序提供了一组do-while语句,每个语句都在另一个类中定义了一个不同的setMethod,但是我想用一种更简洁的方式来实现这一点。我想知道某种循环是否能做到这一点。或者如果你可以有一个setMethod数组。或者任何可以使代码紧凑的东西

参赛者1是类参赛者信息的对象,其中包含每个字段的设置方法


如果您使用的是Java 8,则可以执行以下操作:

List<String> labels = Arrays.asList(
    "Please enter your first name.",
    "Please enter your last name.",
    "Please enter your street number."
);

Function<String, Void> setters = Arrays.asList(
    contestant1::setName,
    contestant1::setLastName,
    contestant1::setStreetNumber
);

Iterator<String> label = labels.iterator();
for(Function<String, Void> setter : setters) {
    do {
        try {
            flag = false;
            System.out.println(label.next());
            String value = Scanner.nextLine();
            setter.apply(value);
        } catch (InvalidInputException e) {
            System.out.println(e.getMessage());
            flag = true;
        }
    } while (flag);
}
List labels=Arrays.asList(
“请输入您的名字。”,
“请输入您的姓氏。”,
“请输入您的街道号码。”
);
函数setters=Arrays.asList(
参赛者1::集名,
参赛者1::setLastName,
参赛者1::setStreetNumber
);
迭代器标签=labels.Iterator();
for(函数设置器:设置器){
做{
试一试{
flag=false;
System.out.println(label.next());
字符串值=Scanner.nextLine();
setter.apply(值);
}捕获(无效){
System.out.println(e.getMessage());
flag=true;
}
}而(旗),;
}

如果您使用的是Java 8,则可以执行以下操作:

List<String> labels = Arrays.asList(
    "Please enter your first name.",
    "Please enter your last name.",
    "Please enter your street number."
);

Function<String, Void> setters = Arrays.asList(
    contestant1::setName,
    contestant1::setLastName,
    contestant1::setStreetNumber
);

Iterator<String> label = labels.iterator();
for(Function<String, Void> setter : setters) {
    do {
        try {
            flag = false;
            System.out.println(label.next());
            String value = Scanner.nextLine();
            setter.apply(value);
        } catch (InvalidInputException e) {
            System.out.println(e.getMessage());
            flag = true;
        }
    } while (flag);
}
List labels=Arrays.asList(
“请输入您的名字。”,
“请输入您的姓氏。”,
“请输入您的街道号码。”
);
函数setters=Arrays.asList(
参赛者1::集名,
参赛者1::setLastName,
参赛者1::setStreetNumber
);
迭代器标签=labels.Iterator();
for(函数设置器:设置器){
做{
试一试{
flag=false;
System.out.println(label.next());
字符串值=Scanner.nextLine();
setter.apply(值);
}捕获(无效){
System.out.println(e.getMessage());
flag=true;
}
}而(旗),;
}
String[]setMethodNames={“FirstName”、“LastName”、“Street”};
Class cls=Class.forName(“参赛者”);
Class参数types=String.Class;
对于(字符串s:setMethodNames){
做{
试一试{
flag=false;
System.out.println(“请输入您的“+s+”:”);
字符串inp=scanner.nextLine();
cls.getDeclaredMethod(“set”+s,参数类型).invoke(竞争者1,inp);
}捕获(无效){
System.out.println(e.getMessage());
flag=true;
}
}而(旗),;
}
您还可以使用反射和调用setter

String[]setMethodNames={“FirstName”、“LastName”、“Street”};
Class cls=Class.forName(“参赛者”);
Class参数types=String.Class;
对于(字符串s:setMethodNames){
做{
试一试{
flag=false;
System.out.println(“请输入您的“+s+”:”);
字符串inp=scanner.nextLine();
cls.getDeclaredMethod(“set”+s,参数类型).invoke(竞争者1,inp);
}捕获(无效){
System.out.println(e.getMessage());
flag=true;
}
}而(旗),;
}
您还可以使用反射和呼叫设置器

List<String> labels = Arrays.asList(
    "Please enter your first name.",
    "Please enter your last name.",
    "Please enter your street number."
);

Function<String, Void> setters = Arrays.asList(
    contestant1::setName,
    contestant1::setLastName,
    contestant1::setStreetNumber
);

Iterator<String> label = labels.iterator();
for(Function<String, Void> setter : setters) {
    do {
        try {
            flag = false;
            System.out.println(label.next());
            String value = Scanner.nextLine();
            setter.apply(value);
        } catch (InvalidInputException e) {
            System.out.println(e.getMessage());
            flag = true;
        }
    } while (flag);
}
String[] setMethodNames={"FirstName","LastName","Street"};
Class cls = Class.forName("<qualifiedname>Contestant");
Class parameterTypes = String.class;

for(String s:setMethodNames){
    do{
        try{
            flag=false;
            System.out.println("Please enter your "+s+" :");
            String inp=scanner.nextLine();
            cls.getDeclaredMethod("set"+s, parameterTypes ).invoke(contestant1, inp);

         }catch(InvalidInputException e){
            System.out.println(e.getMessage());
            flag = true;
         }
    }while(flag);
}