我们有Groovy DSL,可以使用它存储要在DB中执行的逻辑并在Java中执行相同的groovy脚本。
Java也可以吗?我正在使用Java 11。
要求是读取JSON输入并更新给定字段的值。字段和逻辑应该是动态的。
答案 0 :(得分:4)
这个问题似乎过于“广泛”,在某种程度上还是理论上的
如果我对它的理解正确,那么您在问是否可以在Java中创建DSL ...
如果是,答案为是。 它是否具有与Groovy相同的表达水平?不...
从语言语法的角度来看,Java是一种非常过时的语言,这基本上是为什么诸如Scala Groovy和最近的Kotlin之类的“较新”语言出现在JVM之上的第一个原因。
Java只能以非常有限的方式提供用于编写简洁而富于表现力的DSL的语法结构,而更现代的语言则需要更多的结构。
这可能是DSL维护者通常选择Groovy / Kotlin作为DSL语言而不是Java的原因。 例子:
话虽如此,并不是完全不可能仅通过API用Java构建DSL。
以下是示例:
Mockito具有用于指定测试期望的DSL。示例:
description
(相当成功的IMO)尝试创建DSL的另一个示例是JOOQ 该库为使用关系数据库提供了非常好的DSL。
这是一个用Jooq构建的DSL的示例(Java,而不是Groovy):
when(foo.bar(a,b,c)).thenReturn(d);
因此,您可以借用一下关于DSL在这些语言中的外观的想法,并自行决定。