评估
对于多数Java程序员来说,Lombok并不陌生,它可以通过注解来简化Java代码的编写,减少样板代码的编写,提高开发效率。
当然伴随着Java版本的升级,@Data逐步被records取代,@Builder也更擅长Builder的Jilt替换。
同样是Java annotation processor机制,Manifold却被很多Java程序员忽略。 Manifold提供了很多有用的功能,如下:
- String Templates
- Direct, type-safe access to: SQL,GraphQL, JSON & JSON Schema, YAML, XML,CSV
- Extension methods
- Delegation
- Properties
- Tuple expressions
- Operator overloading
- Science
- Structural Typing
- Type-safe Reflection
- Checked Exception Handling
- Unit expressions
- A Java template engine
- A preprocessor
也就是说你可以直接在Java代码中使用SQL,GraphQL,JSON等,而不需要额外的开发包支持,这对于Java程序员来说是非常方便。 让我们看一个最简单的String Template例子:
///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 21
//COMPILE_OPTIONS -Xplugin:Manifold
//DEPS systems.manifold:manifold-all:2024.1.12
public class ManifoldDemo {
public static void main(String[] args) {
String name ="Jackie";
String welcome = "Helo $name!";
System.out.println(welcome);
}
}
这个例子中,我们使用了Manifold的$name来引用变量,这样可以减少字符串拼接的代码,提高代码的可读性。
Manifold还有很多其他功能,如直接调用私有函数的Type-safe Reflection,如下:
@Jailbreak Foo foo = new Foo();
// Direct, *type-safe* access to *all* foo's members
foo.privateMethod(x, y, z);
foo.privateField = value;
其他诸如函数扩展,Preprocessor等都非常实用。
虽然Manifold的JetBrains插件非常不错,但是刚开始还是有一点配置和学习成本,考虑Java程序员的使用习惯,所以只是推荐试用。 但在在一些简单脚本的场景,如结合JBang,Manifold确实非常简单明了。
Manifold的功能非常不错,但是如果你使用Kotlin的话,相关的特性已经被实现啦,目前处于评估阶段。
Manifold & Friends
- Lombok: https://projectlombok.org/
- Jilt: https://github.com/skinny85/jilt