Java 如何检查字符串值是否为给定类的类型<?>

2022-09-02 13:26:52

好吧,这是一个复杂的问题,我完全迷失了。

假设您有一个字符串和一个泛型类。就像这样。

String string;
Class<?> clazz;

如何检查 String 是否表示类可以相等的值。

例如,假设:

String string = "true";
Class<?> clazz = Boolean.class;

如何检查并查看字符串“true”实际上是布尔值?

这是另一个示例。假设:

String string = "true";
Class<?> clazz = Integer.class;

如何检查并查看字符串“true”不是整数?


答案 1

鉴于您只想对包装器类型执行此操作,则可以在此处使用一些反射技巧(为简洁起见,此处忽略不相关代码的异常处理):

String string = "ABC";
Class<?> clazz = Integer.class;

Method method = clazz.getDeclaredMethod("valueOf", String.class);

if (method != null) {
    try {
        Object obj = method.invoke(null, string);       
        System.out.println("Success : " + obj);

    } catch (InvocationTargetException ex) {
        System.out.println("Failure : " + string + " is not of type " + 
                                          clazz.getName());
    }
}

我正在考虑这样一个事实,即每个包装器类都有一个静态方法,该方法采用类型的参数,并返回该类型的值。如果参数不可转换为相应的包装器类型,则引发异常。valueOfStringwrapper

因此,在上面的情况下,如果引发异常,则该值不是类型。stringclazz

附言:请注意,对于 ,任何不为 的字符串都将被视为 。Boolean.class"true"false


答案 2

我假设你正在实现某种规范/协议或类似的。

  1. 查看规格。
  2. 定义有效输入的语法
  3. 解析该语法。

这类似于编程语言对文本执行的操作。