调用方法后的Java反射,该方法未引发异常

1llum1n471​​c0nf1rm3d 360noscope

因此,我创建了一个InvalidInputExeption异常类,如果没有有效的输入,它会在setter方法中用于引发异常。

public class kalsi.ContestantInformation {

    public void setFirstName(String firstName) throws InvalidInputExeption {
        checkInput(firstName, "Please only enter letter in the first name");
        this.firstName = firstName.replaceAll("\\s", "").toLowerCase();
    }

    public void setLastName(String lastName) throws InvalidInputExeption {
        checkInput(lastName, "Please only enter letter in the last name");
        this.lastName = lastName.replaceAll("\\s", "").toLowerCase();
    }

    public void setStreetNumber(String streetNumber) throws InvalidInputExeption {
        checkInput(streetNumber, "Please only enter numbers in the street number");
        this.streetNumber = streetNumber.replaceAll("\\s", "").toLowerCase();
    }

    public void setStreetName(String streetName) throws InvalidInputExeption {
        checkInput(streetName, "Please only enter letter in the street name name");
        this.streetName = streetName.replaceAll("\\s", "").toLowerCase();
    }

    public void checkInput(String s, String message) throws InvalidInputExeption {
        char[] array = s.toCharArray();
        for (char c : array) {
            if (!Character.isLetter(c)) {
                throw new InvalidInputExeption(message);
            }
        }

    }

    public void checkInput(int i, String message) throws InvalidInputExeption {
        String s = i + "";
        char[] array = s.toCharArray();
        for (char c : array) {
            if (!Character.isDigit(c)) {
                throw new InvalidInputExeption(message);
            }
        }
    }
}

这是我调用setFirstNameusing反射的主要方法注意setFirstName不是唯一的setter方法。所有其他方法都在一个字符串数组中,这些字符串的名称为setMethods

public static void main(String[] args)
        throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException,
        SecurityException, ClassNotFoundException, InstantiationException {
    ContestantInformation contestant1 = new ContestantInformation();
    String[] questions = { "What is your first name", "What is your last name", "What is your Street Name",
            "What is your Sreet Number" };
    String[] methods = { "setFirstName", "setLastName", "setStreetName", "setStreetNumber" };
    for (int i = 0; i < methods.length; i++) {
        do {
            try {
                flag = false;
                System.out.println(questions[i]);
                String scannerInput = scanner.nextLine();
                classContestantInfo.getDeclaredMethod(methods[i], stringParameter).invoke(contestant1,
                        scannerInput);
            } catch (InvocationTargetException e) {
                if (e.getCause() instanceof InvalidInputExeption) {
                    System.out.println(e.getMessage());
                }
            }
        } while (flag);
    }
}

问题是,当我输入不是字符串的内容时,它不会再提出问题,也不会给出错误消息,这里是输出。

What is your first name 9 null What is your last name

它会输出null并移至下一个问题,即使该问题应输出“请只输入名字中的字母”,然后再次要求用户输入。

如果有人要克隆代码,则以下是git clone URL:程序是ICS4U存储库中的RealityShowApplication:

https://github.com/simar1998/ICS4U.git
欧文·博维特(Erwin Bolwidt)

您正在显示的讯息,而InvocationTargetException不是您的讯息InvalidInputException

您还希望通过将repeat-flag设置为来确保重复该问题true

将catch子句主体更改为:

if (e.getCause() instanceof InvalidInputExeption) {
    System.out.println(e.getCause().getMessage()); // <-- note: getCause() here
    flag = true; // Make sure that the question is repeated
}

我建议将其更改flaginputErrorrepeatFlag或更能描述此标志功能的其他内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检索从反射调用的方法引发的* real *异常

来自分类Dev

在类方法中引发副作用并在调用方法中捕获的模拟异常给出“未引发”

来自分类Dev

Java反射调用方法NoSuchMethodException

来自分类Dev

调用方法的对象-Java反射

来自分类Dev

通过反射将子类类型传递给Java泛型方法不会引发异常

来自分类Dev

反射性地调用引发异常的构造函数

来自分类Dev

从视图编辑器引发自定义Laravel异常时未调用方法render()

来自分类Dev

Java:吞咽异常后如何调用先前的方法

来自分类Dev

从Java调用存储过程-ORA错误未引发异常

来自分类Dev

无法通过Java反射调用方法:NoSuchMethodException

来自分类Dev

Java反射-如何调用getter / setter方法?

来自分类Dev

如何分析反射调用的Java方法

来自分类Dev

如果在try / catch块中有调用,并且该方法还引发异常,则catch优先吗?

来自分类Dev

如果在try / catch块中有调用,并且该方法还引发异常,则catch优先吗?

来自分类Dev

在Java中找到对方法调用的引用,以使用反射清理未使用的pojo字段

来自分类Dev

重写的方法无法引发Java异常

来自分类Dev

当Java方法引发异常时,它会返回给JNI调用者什么?

来自分类Dev

@ControllerAdvice异常处理程序方法未调用

来自分类Dev

异步方法引发异常

来自分类Dev

在@DataProvider方法中引发异常后,TestNG跳过测试

来自分类Dev

不会在“ try”块中引发异常的调用方法

来自分类Dev

在其他类中引发异常的调用方法

来自分类Dev

如何验证是否为引发异常的类调用了方法

来自分类Dev

通过动态类型调用C#方法引发异常

来自分类Dev

为什么当我测试某个方法引发异常而该方法引发异常时,测试是否停止?

来自分类Dev

Flux.generate()引发java.lang.IllegalStateException:生成器未调用任何SynchronousSink方法

来自分类Dev

如何安全删除方法,如何知道反射是否未使用该方法?

来自分类Dev

未调用方法后的Spring Aop

来自分类Dev

Exception方法,该方法记录并引发作为参数来的异常

Related 相关文章

  1. 1

    检索从反射调用的方法引发的* real *异常

  2. 2

    在类方法中引发副作用并在调用方法中捕获的模拟异常给出“未引发”

  3. 3

    Java反射调用方法NoSuchMethodException

  4. 4

    调用方法的对象-Java反射

  5. 5

    通过反射将子类类型传递给Java泛型方法不会引发异常

  6. 6

    反射性地调用引发异常的构造函数

  7. 7

    从视图编辑器引发自定义Laravel异常时未调用方法render()

  8. 8

    Java:吞咽异常后如何调用先前的方法

  9. 9

    从Java调用存储过程-ORA错误未引发异常

  10. 10

    无法通过Java反射调用方法:NoSuchMethodException

  11. 11

    Java反射-如何调用getter / setter方法?

  12. 12

    如何分析反射调用的Java方法

  13. 13

    如果在try / catch块中有调用,并且该方法还引发异常,则catch优先吗?

  14. 14

    如果在try / catch块中有调用,并且该方法还引发异常,则catch优先吗?

  15. 15

    在Java中找到对方法调用的引用,以使用反射清理未使用的pojo字段

  16. 16

    重写的方法无法引发Java异常

  17. 17

    当Java方法引发异常时,它会返回给JNI调用者什么?

  18. 18

    @ControllerAdvice异常处理程序方法未调用

  19. 19

    异步方法引发异常

  20. 20

    在@DataProvider方法中引发异常后,TestNG跳过测试

  21. 21

    不会在“ try”块中引发异常的调用方法

  22. 22

    在其他类中引发异常的调用方法

  23. 23

    如何验证是否为引发异常的类调用了方法

  24. 24

    通过动态类型调用C#方法引发异常

  25. 25

    为什么当我测试某个方法引发异常而该方法引发异常时,测试是否停止?

  26. 26

    Flux.generate()引发java.lang.IllegalStateException:生成器未调用任何SynchronousSink方法

  27. 27

    如何安全删除方法,如何知道反射是否未使用该方法?

  28. 28

    未调用方法后的Spring Aop

  29. 29

    Exception方法,该方法记录并引发作为参数来的异常

热门标签

归档