我试图找到一种方法来检查字符串是否可以解析为特定类型。
我的用例是:
我已经从字段地图(名称和类型)创建了动态html表单
在我的控制器中,我从http请求中获取表单值作为字符串
我想检查检索到的字符串是否可解析为所需类型,以便在不可能的情况下在表单中显示错误消息。
有人知道如何在不逐个测试每种类型的情况下检查解析是否可行? (Double,Integer,Date,BigDecimal等)
我在Java或第三方库中寻找类似的东西:
myString.isParsableAs(Class<?> wantedType)
感谢您的帮助!
答案 0 :(得分:2)
制作从Class
到Predicate
的地图,并使用该地图为您的班级获取“测试对象”。这是一个例子:
static Map<Class<?>,Predicate<String>> canParse = new HashMap<>();
static {
canParse.put(Integer.TYPE, s -> {try {Integer.parseInt(s); return true;} catch(Exception e) {return false;}});
canParse.put(Long.TYPE, s -> {try {Long.parseLong(s); return true;} catch(Exception e) {return false;}});
};
您现在可以检索该类的谓词,并测试您的字符串,如下所示:
if (canParse.get(Long.TYPE).test("1234567890123")) {
System.out.println("Can parse 1234567890123");
} else {
System.out.println("Cannot parse 1234567890123");
}
您不必浏览整个测试人员列表;只会针对您要测试的类型进行检查。