V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
122006
V2EX  ›  分享创造

[Zircon]在 Java 里流畅使用拓展方法语法

  •  
  •   122006 · 2023-12-21 14:14:26 +08:00 · 789 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近写了个 java 语法相关的库,为 java 支持了拓展函数和模板字符串。

    Zircon ( github 路径为 122006/Zircon )

    引入该库可以为原有 java 的项目基础上自由使用拓展函数和模板字符串的语法。

    3 分钟上手,尽力减少学习成本,使用无感知。

    1. 拓展方法

    什么是拓展方法

    能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。

    拓展方法的必要性

    拓展方法没有必要性。拓展方法只是为了能让你更简单地完成你的代码,专注于业务逻辑而不是各种工具类的记忆中。

    在任何场景,你都可以用工具类的静态方法以替换拓展方法的实现,但是拓展方法可以让你写得更嗨以及代码更加简洁。

    比如 java 的集合类不好用,你可以设计个第三方库叫 JAVA-Collection-plus ,让引用其的项目都能使用自定义且强壮的方法

    欢迎使用Zircon,希望能给你带来更好的 java 代码体验。

    使用方法及注意事项

    在项目任意位置中,声明一个包含注解@ExMethod的方法。后续你可以在该项目、及引入该项目的项目的任何地方中使用这个方法。

    2. 内插字符串

    什么叫内插字符串?

    字符串插值功能构建在复合格式设置功能的基础之上,提供更具有可读性、更方便的语法,用于将表达式结果包括到结果字符串。

    对某个表达式执行计算后,其结果立即转换为一个字符串并包含到结果字符串中

    如何使用内插字符串

    若要将字符串标识为内插字符串,可在该字符串前面加上 $f 符号。 可嵌入任何会在内插字符串中返回值的有效 JAVA 表达式。

    常见问题回答:

    1. 为什么不用 kotlin:

      一个项目切 kotlin 麻烦,但是这个库引用之后就可以直接使用,几乎 0 改造成本

    2. 你在生产环境上用么?

      该库都是编译时织入,对运行没有任何影响。(个人项目用得爽得了)

    3. 为什么不用 lombok 、manifold?

      lombok 的拓展方法用起来很麻烦,实用性很低。manifold 的拓展方法和模板字符串方面有部分缺陷,功能上也更局限,而且太重了。

    4. 公司都不用 lombok ,为啥要用你这个

      说得对,但是个人项目真的写得很爽~ :)

    5. java21 已经支持了模板字符串

      众所众知中国互联网的 java 版本只有 8 。本库可以给各个 java 版本增加模板字符串功能

    github 传送门: https://github.com/122006/Zircon 欢迎各位大佬指教(走过路过给个 star 呗~

    122006
        1
    122006  
    OP
       2023-12-21 14:50:02 +08:00
    ExMethodUtil
    项目 ExMethodUtil 封装了常见的 java 工具方法,可用于体验或者测试拓展方法功能
    项目地址: https://github.com/122006/ExMethodUtil
    引入:implementation 'com.github.122006:ExMethodUtil:1.0.5'
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:51 · PVG 04:51 · LAX 12:51 · JFK 15:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.