wbprime

wbprime

V2EX 第 435576 号会员,加入于 2019-08-13 09:55:20 +08:00
根据 wbprime 的设置,主题列表只有在你登录之后才可查看
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
wbprime 最近回复了
2020-12-28 10:14:01 +08:00
回复了 monetto 创建的主题 Java IDEA 社区版和旗舰版果然还是有-内在区别-的吧
@hantsy 我没有说 Lombok 不好用,人家开发者的技术比我高出了不知几万倍,全世界有很多人都在用它。

我想表达的观点是这个东西干了什么你一定要清楚,它使用的是非 Java 的方式来提升了开发效率;如果想要代码写的爽,除了 Lombok 之外,使用其他的 JVM based Language 与 Java 混合开发是一个更好的选择,一是全能全面,一是标准化。如果不需要很复杂的语言层面增强,只需要 Getter Setter 之类的,我更加推荐 AutoValue 。

以上。
2020-12-25 17:46:19 +08:00
回复了 monetto 创建的主题 Java IDEA 社区版和旗舰版果然还是有-内在区别-的吧
@hantsy 感觉你在混淆概念。

Lombok 是在编译期修改 AST 的方式修改字节码,这种行为是非预期的不具有可移植性的。而且由于 getter setter constructor logger 等都是在编译期生成的,导致的一个现象就是开发者在开发时面向想象编程的(就算在 IDE 插件的帮助下能自动提示)。正经的 APT 类的工具是生成新的类,使用的时候一般是通过接口或父类来使用,这个是符合 Java 开发实践的。

而你所说的 weaving,是在运行期的。这个行为也是标准的,跨 JDK 兼容的。而且这种运行时也大部分是生成字节码而不是修改字节码,通过 DI 来 intercept 对象创建过程。少量的修改字节码的工具,一般用在测试中。

我之所以不喜欢在 Java 项目中使用 Lombok,是因为其使用了非标准化的私有的 API,相当于自己实现了一个 JAVM based language 的编译器,导致代码不纯洁;至于 IDE 什么的倒是次要的。Lombok 想要解决的问题确实存在,但是也都有其他替代方案:Getter/Setter/Builder 考虑 AutoValue & FreeBuilder ; Log support 考虑使用 Google Flogger ; var 考虑 JDK 11 ;等等。

以上 _^_^_。

补充,lombok 不仅仅是使用了 APT 技术,APT 没有提供修改 AST 的方法,lombok 使用了 OpenJDK/Oracle JDK javac 私有的 API,而这些 API 不保证兼容性,see <https://notatube.blogspot.com/2010/11/project-lombok-trick-explained.html>。虽然当前的主流 JDK 都是 OpenJDK based,Lombok 也对 OpenJ9 做了适配,但是技术的发展是难以预计的,没准几年内有另外一个 Anti-OpenJDK 的新 JDK 发行版面世且获得了巨大成功呢(这并非不可能的,想想 GraalVM 。。。)
2020-12-25 08:59:03 +08:00
回复了 wumao 创建的主题 程序员 请教一下程序员如何使用思维导图类软件
Plantuml
2020-12-24 15:38:26 +08:00
回复了 monetto 创建的主题 Java IDEA 社区版和旗舰版果然还是有-内在区别-的吧
Lombok 会在编译阶段修改类的字节码,导致字节码和 Java 源码不一致;开发的时候是面向字节码调用而不是面向源码;如果能接受这种方式,为什么不直接使用 Kotlin 或 Groovy 来与 Java 协同开发呢

AutoValue 则不一样,遵循 APT 规范,只会生成字节码而不修改字节码;开发的时候还是遵循的 Java 的面向接口开发的传统。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2511 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 04:03 · PVG 12:03 · LAX 20:03 · JFK 23:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.