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

Zac*_*ano 18 java string class

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

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

String string;
Class<?> clazz;
Run Code Online (Sandbox Code Playgroud)

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

例如,让我们说:

String string = "true";
Class<?> clazz = Boolean.class;
Run Code Online (Sandbox Code Playgroud)

我如何检查并看到字符串"true"实际上是一个布尔值?

这是另一个例子.让我们说:

String string = "true";
Class<?> clazz = Integer.class;
Run Code Online (Sandbox Code Playgroud)

我如何检查并看到字符串"true"不是整数?

Roh*_*ain 19

鉴于你只想要包装类型,你可以在这里使用一些反射黑客(为了简洁,这里忽略了对不相关代码的异常处理):

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我考虑到这样一个事实:每个包装类都有一个静态 valueOf方法,它接受一个类型的参数String,并返回该wrapper类型的值.如果参数不能转换为相应的包装器类型,则抛出异常.

因此,在上面的情况下,如果抛出异常,则该string值不是clazz类型.

PS:请注意,对于Boolean.class任何非字符串都"true"将被视为 false.