linux_china技术雷达linux_china技术雷达
评估

对于多数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