Java如何检查字符串值是否是给定类的类型<?>
好吧,这是一个复杂的问题,我完全迷路了
假设您有一个字符串和一个泛型类。像这样
String string;
Class<?> clazz;
如何检查字符串是否表示类可以等于的值
比如说:
String string = "true";
Class<?> clazz = Boolean.class;
我如何检查并确定字符串“true”实际上是一个布尔值
这里是另一个例子。让我们说:
String string = "true";
Class<?> clazz = Integer.class;
如何检查并确定字符串“true”不是整数
# 1 楼答案
考虑到您只希望对包装类型使用此方法,您可以在此处使用一些反射hack(为简洁起见,此处忽略了对无关代码的异常处理):
我考虑到这样一个事实,即每个包装器类都有一个静态
valueOf
方法,该方法接受类型为String
的参数,并返回该wrapper
类型的值。如果参数不能转换为相应的包装器类型,则引发异常因此,在上述情况下,如果抛出异常,
string
值不是clazz
类型p.S.:注意,对于
Boolean.class
,任何不是"true"
的字符串都将被视为false
# 2 楼答案
在javascript中,可以对字符串求值()。在Java中,您没有这样的方法。您必须为该检查实现自己的启发式
但是,您可以做的一件事是尝试用给定的类解析字符串。比如:
如果解析成功,那么字符串可以用作该类型的值。如果失败,那么您将得到一个异常。执行这些检查,然后扣除一些结论
# 3 楼答案
我假设您正在实现某种规范/协议或类似的东西
这类似于编程语言对文本所做的操作
# 4 楼答案
我会考虑使用javabeans ^ {< CD1>}机制。
这避免了显式反射的需要,如果您决定需要测试除原语包装器之外的类,您可以向
PropertyEditorManager.registerEditor()
注册一个新的编辑器不幸的是,这仍然存在Rohit解决方案的问题,即
test("1", Number.class)
将失败# 5 楼答案
我现在无法测试这个解决方案,但为什么不能这样做呢?如果您可以自己枚举所有可能的类,只需在类上创建一些switch语句
当然,您需要知道所有可能的类,并且需要知道属于该类的方法,该类能够解析字符串并返回其类型。对于将是
valueOf
的基本包装器如果您计划只转换包装器,Rohit的解决方案将是一个更好的选择。但是,如果您没有这样做,并且无法将
valueOf
方法添加到此新类,那么这可能是您唯一的选择