检查字符串是否可解析为另一种Java类型

时间:2016-11-03 13:29:17

标签: java class parsing casting

我试图找到一种方法来检查字符串是否可以解析为特定类型。

我的用例是:

  • 我已经从字段地图(名称和类型)创建了动态html表单

  • 在我的控制器中,我从http请求中获取表单值作为字符串

  • 我想检查检索到的字符串是否可解析为所需类型,以便在不可能的情况下在表单中显示错误消息。

有人知道如何在不逐个测试每种类型的情况下检查解析是否可行? (Double,Integer,Date,BigDecimal等)

我在Java或第三方库中寻找类似的东西:

myString.isParsableAs(Class<?> wantedType)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

制作从ClassPredicate的地图,并使用该地图为您的班级获取“测试对象”。这是一个例子:

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");
}

您不必浏览整个测试人员列表;只会针对您要测试的类型进行检查。

Demo.