【发布时间】:2021-06-26 13:26:00
【问题描述】:
我在 java Map
{country=Australia, animal=Elephant, age=18}
现在在解析地图时,可以像使用各种条件语句一样-
if(dataMap.get("country").contains("stra")
OR
if(dataMap.get("animal") || 100 ==0)
OR
Some other operation inside if
我想创建一个配置文件,其中包含有关地图内数据应如何显示的所有规则。简单来说,就是想在config文件中定义key country、animal、age对应的value应该遵循的条件,对它们进行什么操作,这样就可以去掉if else和额外的代码。配置文件将用于解析地图。
谁能告诉我如何编写这样的配置文件,以及如何在 Java 中使用它? 示例和代码参考会有所帮助。
我正在考虑为此目的创建一个 json 文件
例子-
Boolean b = true;
List<String> conditions = new ArrayList<>();
if(dataMap.get("animal").toString().contains("pha")){
conditions.add("condition1 satisifed");
if(((Integer.parseInt(dataMap.get("age").toString()) || 100) ==0)){
conditions.add("condition2 satisifed");
if(dataMap.get("country").equals("Australia")){
conditions.add("condition3 satisifed");
}
else{
b=false;
}
}
else{
b=false;
}
}
else{
b=false;
}
现在假设我想在配置文件中为每个映射值定义条件,例如操作(等于、或、包含)和测试值,而不是使用 if else 的。然后配置文件就可以用来解析java map了
【问题讨论】:
-
JSON 文件基本上是一种存储元组的方式。你想要的看起来更像是一个 DSL,因为迟早你会想要评估的不是元组,而是表达式。我认为与其寻找 JSON 等数据格式,不如研究 DSL 和语法,也许是一个简单的编译器。我的 2c。
-
任何代码示例或参考资料?
-
意图不够明确,请给出完整的可运行示例。那么其他人可能会提出如何优化。
-
@DawsonSmith - 这个theantlrguy.atlassian.net/wiki/spaces/ANTLR3/pages/2687299/…
-
@exudong 添加示例