一种 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,让摸鱼变得更加快乐~
7996 次点击
所在节点    推广
70 条回复
122006
2021-02-06 01:19:07 +08:00
@tamer 不好意思,标题起得确实不太恰当
122006
2021-02-06 01:31:00 +08:00
@Kirsk 不要暴躁,我保证不强迫你用。可变参数接受参数进行拼接的时候,会有额外的引号和参数间的空格。额外的行字节数会引发自动换行等问题,阅读的时候这个拼接字符串也并不连贯。
比如 lambda 表达式,你还是更加会使用 java7 的匿名内部类表示?反正也可以实现这个效果
122006
2021-02-06 01:34:01 +08:00
@Cbdy 有个问题,你需要一个临时名字来代替每个代码块。这个其实起名字很麻烦且没有意义,而且还会涉及重名等问题,比如单个变量。。。。
而且可能传入一个 map 也需要多行代码来实现
Kirsk
2021-02-06 01:41:37 +08:00
@122006 辨无可辨 show me the code
zzl22100048
2021-02-06 02:33:09 +08:00
可以加个文本块的糖配合一下
newmlp
2021-02-06 09:58:03 +08:00
我连 Java 都没写过,更何况 Java 这种语法了
micean
2021-02-06 09:59:58 +08:00
@122006 抱歉,因为图片打不开,我想当然啦
xiaowangge
2021-02-06 10:45:10 +08:00
@Livid 标题党、推广。
122006
2021-02-07 08:20:17 +08:00
@zzl22100048 文本块语法糖在 java15 有提供支持。就不班门弄斧做重复方法了
122006
2021-02-10 08:57:11 +08:00
并不是常规字符串占位替代方法哦

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

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

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

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

© 2021 V2EX