Java DSL用于动态逻辑

时间:2018-11-11 06:14:39

标签: java dsl java-11

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

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

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

1 个答案:

答案 0 :(得分:4)

这个问题似乎过于“广泛”,在某种程度上还是理论上的

如果我对它的理解正确,那么您在问是否可以在Java中创建DSL ...

如果是,答案为是。 它是否具有与Groovy相同的表达水平?不...

从语言语法的角度来看,Java是一种非常过时的语言,这基本上是为什么诸如Scala Groovy和最近的Kotlin之类的“较新”语言出现在JVM之上的第一个原因。

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

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

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

话虽如此,并不是完全不可能仅通过API用Java构建DSL。

以下是示例:

Mockito具有用于指定测试期望的DSL。示例:

description

(相当成功的IMO)尝试创建DSL的另一个示例是JOOQ 该库为使用关系数据库提供了非常好的DSL。

这是一个用Jooq构建的DSL的示例(Java,而不是Groovy):

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

因此,您可以借用一下关于DSL在这些语言中的外观的想法,并自行决定。