一种 99%程序员都没用过的 Java 语法

2021-02-05 14:54:26 +08:00
 122006
rt 。

其实就是内插 /模板字符串

很多语言都有的这个功能,而作为业界一大老牌主流语言,JAVA 程序员却只能痛苦地用密密麻麻的加号拼接,丑陋得很
当然,也可以用 String.format,但是大多数情况并不需要特殊格式化,动辄七八个十多个参数,一个个对应起来头都在痛。

更何况,“我可以不用,但不能没有!”

如果我们可以这么写,岂不是美滋滋?

String add = "test2";

assertEquals($("test1 $add"), "test1 test2");

assertEquals($("test1 ${\"Test,mode\".substring(0,6)}${1+2}"), "test1 Test,m3");

---------------------------------------------------------------------------------------------------------------------------------
现在,Java 开发者有了一个新的选择:

Zircon ( https://github.com/122006/Zircon

Zircon 可以让开发者在已有的 java 项目中使用内插字符串。
1 分钟快速配置后,可以和 Groovy 、kotlin 等语言一样快乐地使用美元符进行优雅的字符串拼接,并获得 idea 语法检查及联想功能

使用方法:
使用$()方法包裹字符串
在字符串中,使用${code}以执行 java 代码并插入至原字符串,或使用$变量名以插入至原字符串

优势:
支持 idea 语法检查及方法联想依赖查询等功能(和原生代码完全一致)
无任何依赖库
不需要修改任何原有项目代码,接入即用
支持 Gradle 、Maven 项目,直接 javac 编译.java 文件也支持哦
兼容 Lombok 等语法树替换项目
支持 Android 、JavaWeb 、JavaFx 等开发
几乎不会增加编译时间


为什么还不来试试呢?快快乐乐拼接字符串

JAVA,让摸鱼变得更加快乐~
7741 次点击
所在节点    推广
70 条回复
bugmakerxs
2021-02-05 16:43:17 +08:00
这,不是 springEl 么
sadfQED2
2021-02-05 16:44:20 +08:00
哈哈,java 也开始抄袭我大 php 了,

php 果然是世界上最好的语言
122006
2021-02-05 16:47:46 +08:00
@learningman 引入依赖之后,用起来也和语言本身特性区别不大
122006
2021-02-05 16:52:42 +08:00
@bugmakerxs 类似,但是不局限于注解内(我是这么理解的)。可以在正常代码的任意地方替代字符串使用。
selca
2021-02-05 17:14:46 +08:00
JSR269 实现的东西?
yazinnnn
2021-02-05 17:21:47 +08:00
这侵入性都快大过直接换 kotlin 了...
luozic
2021-02-05 17:57:21 +08:00
为啥不上 kotlin or 用 groovy scala 算求…,反正 Java 的模式匹配基本等于零
sheeta
2021-02-05 18:08:07 +08:00
我选择 PHP
wunonglin
2021-02-05 18:12:12 +08:00
这不就是 js 的
```
const value = 'YO'
console.log(`Hello: ${ value }`)
```
cheng6563
2021-02-05 18:15:18 +08:00
这。。。,lombok 这种加注释处理器的都一堆人不舍得用,你这还直接改 javac 了
Yohann97
2021-02-05 18:15:20 +08:00
模板字符串?谁说我没用过 Hutool util
122006
2021-02-05 18:15:38 +08:00
@selca 不是,比 JSR269 靠前,重载的词法分析器.JSR269 不好做这种动态代码
cheng6563
2021-02-05 18:18:19 +08:00
@cheng6563 我盲了,无视这句话
122006
2021-02-05 18:21:19 +08:00
@cheng6563 可以不用,但是要有,这不过分吧。改 javac 的项目也不少,和 lombok 一样,用不用看个人自己选择。重写 javac 又没有引发别的问题,一棍子打死没意义
122006
2021-02-05 18:23:22 +08:00
@luozic 比如你就是要用 java 写呢,比如老项目比如就是有 java 的需求。提供一个可选性,并不是一定要用
122006
2021-02-05 18:23:50 +08:00
@yazinnnn 对使用者单纯使用来说,代码侵入性很低的
kingfalse
2021-02-05 18:24:58 +08:00
啊这,说好的外面蹭蹭,结果你都进到了编译层,太深了太深了,
122006
2021-02-05 18:25:28 +08:00
@Yohann97 没用过,但这个项目是直接在字符串中引入变量。你可以看看,完全不一样
122006
2021-02-05 18:26:55 +08:00
@kingfalse lombok 和其他几个重载运算符啊的几个库,也是改的编译过程。(虽然都没有这个项目改得深)
arvinsilm
2021-02-05 18:28:05 +08:00
只是单纯的字符串替换功能,并且会造成可读性下降(不符合标准 Java 语法,缺少其他语言经验的 Java 程序员会比较懵)。适合个人项目吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751581

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX