【发布时间】:2016-11-30 12:19:13
【问题描述】:
我有一种情况,我将获得一个字符串,我需要根据以下限制确定最适合其值的 Class<?>:
- 如果字符串(忽略大小写)等于
"true"或"false",则为Boolean - 否则,如果字符串是没有小数点的整数,则为
Integer - 否则,如果字符串是数字,则为
Double - 否则,如果字符串匹配日期时间格式
YYYY-MM-DD hh:mm:ss.sss,那么它是JavaDate - 否则它只是
String毕竟
我最好的尝试是讨厌的,涉及很多嵌套的try/catch 块:
// Groovy pseudo-code
Class<?> determineValueType(String value) {
Class<?> clazz
if(value.equalsIgnoreCase('true') || value.equalsIgnoreCase('false')) {
clazz = Boolean
} else {
try {
Integer.parse(value)
clazz = Integer
} catch(Exception ex1) {
try {
Double.parse(value)
clazz = Double
} catch(Exception ex2) {
try {
Date.parse('YYYY-MM-DD hh:mm:ss.sss', value)
clazz = Date
} catch(Exception ex3) {
clazz = String
}
}
}
}
clazz
}
是否有任何 Groovier 方法可以实现这一点,也许是某些晦涩的 Groovy 反射 API 特有的方法?
【问题讨论】:
标签: java date reflection groovy introspection