用于动态逻辑的Java DSL



我们有Groovy DSL,使用它可以将要执行的逻辑存储在DB中,并在Java中执行相同的Groovy脚本。

Java也有可能吗?我正在使用Java 11。

要求是读取JSON输入并更新给定字段的值。字段和逻辑应该是动态的。

这个问题似乎过于"宽泛",在某种程度上是理论性的

如果我理解正确的话,你会问是否有可能用Java创建DSL。。。

如果是,答案是肯定的。它是否具有与Groovy中相同的表达能力?不…

从语言语法的角度来看,Java是一种相当过时的语言,这基本上是Scala Groovy和最近Kotlin等"更新"语言出现在JVM之上的第一个原因。

Java以非常有限的方式提供了用于编写简洁和富有表现力的DSL的语法结构,而更现代的语言则有更多的结构。

这可能就是为什么DSL的维护者通常选择Groovy/Kotlin作为DSL语言而不是Java的原因。示例:

  • Gradle-它基本上是一个用于构建项目的基于groovy的DSL(最近它也得到了kotlin的支持(
  • Jenkins pipelines-一个用于在项目上运行CI的Groovy DSL

话虽如此,但使用Java仅使用API构建DSL并非完全不可能。

以下是示例:

Mockito有一个DSL,用于指定测试的期望值。示例:

when(foo.bar(a,b,c)).thenReturn(d);

另一个(相当成功的IMO(尝试创建DSL的例子是JOOQ这个库为处理关系数据库提供了一个非常好的DSL。

下面是一个使用Jooq构建的DSL的示例(Java,而不是Groovy(:

jooqContext
.select()
.from(MY_TABLE)
.fetch()

因此,您可以借用DSL在这些语言中的外观,进行比较并自行决定。

最新更新