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.
| 归档时间: |
|
| 查看次数: |
4825 次 |
| 最近记录: |