java - 如何以更少的重复调用 set 方法。 ( java )

标签 java syntax

您好,我正在制作的程序有一堆 do while 语句,每个语句都有在另一个类中定义的不同 setMethod,但是我希望以更紧凑的方式执行此操作。我想知道某种循环是否可以做到这一点。或者如果你可以有一个 setMethod 数组。或者任何可以使代码紧凑的东西。

contestant1 is an object of the class contestant information which contains the set methods for each field.

do {
    try {
        flag = false;
        System.out.println("Please enter your first name.");
        String firstName = Scanner.nextLine();
        contestant1.setName(firstName);
    } catch (InvalidInputException e) {
        System.out.println(e.getMessage());
        flag = true;
    }
} while (flag);

do {
    try {
        flag = false;
        System.out.println("Please enter your last name.");
        String lastName = Scanner.nextLine();
        contestant1.setLastName(lastName);
    } catch (InvalidInputException e) {
        System.out.println(e.getMessage());
        flag = true;
    }
} while (flag);

do {
    try {
        flag = false;
        System.out.println("Please enter your street number.");
        String streetNumber = Scanner.nextLine();
        contestant1.setStreetNumber(streetNumber);
    } 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);
}

您还可以使用反射和调用 setter

关于java - 如何以更少的重复调用 set 方法。 ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899960/

相关文章:

java - PopupWindow 与 ActionBar 重叠

c++ - 函数的 try-catch 语法之间的区别

PHP mysql_connect 不返回 boolean 值

Python 字典函数在 Linux 上导致语法错误,但在 Windows 上不会

ruby - 如何重用 Vagrantfile 中引用行中的变量?

python - PyMySQL 不插入数据

java - 在Android 4.1.2+上删除烦人的复选框填充

java - Java中如何避免循环引用

java - 在 java.lang.NoClassDefFoundError 上遇到问题

java - OpenCSV 日期解析