ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

MolmoAct2-LIBERO-LeRobot常见问题解答:安装、推理与训练中的10个关键问题

MolmoAct2-LIBERO-LeRobot常见问题解答:安装、推理与训练中的10个关键问题 Immutables 完全指南如何用注解处理器创建不可变对象【免费下载链接】immutablesAnnotation processor to create immutable objects and builders. Feels like Guavas immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included项目地址: https://gitcode.com/gh_mirrors/im/immutablesImmutables 是一个强大的 Java 注解处理器专门用于生成不可变对象和构建器。这个开源项目让 Java 开发者能够轻松创建线程安全的不可变值对象同时享受类型安全和流畅的 API 体验。如果你正在寻找一种优雅的方式来处理数据模型Immutables 提供了完整的解决方案。 为什么选择 Immutables在 Java 开发中不可变对象具有诸多优势线程安全、易于推理、避免副作用、适合函数式编程。然而手动编写不可变对象通常很繁琐——需要大量样板代码。Immutables 通过注解处理器自动生成这些代码让你专注于业务逻辑而非重复的模板代码。Immutables 的核心功能包括自动生成不可变实现类流畅的构建器模式深拷贝和浅拷贝方法与 Jackson、Gson 等流行库的无缝集成支持 Optional 和集合类型 快速开始指南安装与配置在你的 Maven 项目中添加依赖dependency groupIdorg.immutables/groupId artifactIdvalue/artifactId version2.12.2/version scopeprovided/scope /dependency对于 Gradle 项目annotationProcessor org.immutables:value:2.12.2 compileOnly org.immutables:value:2.12.2基本用法示例创建一个简单的不可变对象非常简单import org.immutables.value.Value; Value.Immutable public interface Person { String name(); int age(); ListString hobbies(); }编译后Immutables 会自动生成ImmutablePerson类包含构建器、equals()、hashCode()、toString()等方法。 核心功能详解构建器模式Immutables 生成的构建器提供了流畅的 APIPerson person ImmutablePerson.builder() .name(Alice) .age(30) .addHobbies(Reading, Swimming) .build();复制方法生成的不可变对象支持安全的复制操作Person olderAlice ImmutablePerson.copyOf(person) .withAge(31);集合处理Immutables 智能处理集合类型提供了便捷的方法Value.Immutable public interface ShoppingCart { ListItem items(); MapString, Integer quantities(); } // 使用构建器添加集合元素 ImmutableShoppingCart cart ImmutableShoppingCart.builder() .addItems(item1, item2) .putQuantities(apple, 3) .putQuantities(banana, 5) .build(); 高级特性样式定制通过Value.Style注解你可以定制生成的代码风格Value.Immutable Value.Style( typeImmutable *Impl, builder new, visibility Value.Style.ImplementationVisibility.PRIVATE ) public interface Configuration { String host(); int port(); } // 使用定制后的 API Configuration config new ConfigurationBuilder() .host(localhost) .port(8080) .build();单例模式对于无状态的对象可以创建单例实例Value.Immutable(singleton true) public interface EmptyConfig { // 没有属性的单例 } EmptyConfig config ImmutableEmptyConfig.of();内部化Interning对于频繁创建的对象可以使用内部化来重用实例Value.Immutable(intern true) public interface InternedValue { String key(); int value(); } // 相同的值会返回相同的实例 InternedValue v1 ImmutableInternedValue.of(key, 42); InternedValue v2 ImmutableInternedValue.of(key, 42); // v1 v2 为 true 集成支持Jackson 集成Immutables 与 Jackson 完美集成支持 JSON 序列化和反序列化Value.Immutable JsonSerialize(as ImmutableUser.class) JsonDeserialize(as ImmutableUser.class) public interface User { String username(); String email(); JsonIgnore String password(); // 序列化时忽略 }Gson 集成对于 Gson 用户Immutables 也提供了支持Value.Immutable Gson.TypeAdapters public interface Product { String id(); String name(); BigDecimal price(); } 项目结构概览Immutables 项目采用模块化设计主要模块包括value-annotations/- 包含核心注解定义value-processor/- 注解处理器实现generator/- 代码生成器核心逻辑gson/- Gson 集成支持mongo/- MongoDB 集成模块criteria/- 查询条件构建器每个模块都经过精心设计确保功能的独立性和可扩展性。项目中的测试用例位于value-fixture/test/目录下提供了丰富的使用示例。️ 最佳实践1. 使用抽象类还是接口Immutables 支持接口和抽象类但接口更推荐// 推荐使用接口 Value.Immutable public interface User { String username(); String email(); } // 也可以使用抽象类 Value.Immutable public abstract class Product { public abstract String name(); public abstract BigDecimal price(); }2. 处理 Optional 类型Immutables 对 Java 8 的 Optional 类型有很好的支持Value.Immutable public interface Order { String id(); OptionalLocalDateTime completedAt(); OptionalString notes(); } // 构建时可以省略 Optional 字段 Order order ImmutableOrder.builder() .id(123) .build(); // completedAt 和 notes 默认为 Optional.empty()3. 验证和约束可以在访问器方法上添加验证注解Value.Immutable public interface Account { Size(min 3, max 20) String username(); Email String email(); Positive BigDecimal balance(); } 常见问题解答Q: Immutables 与 Lombok 有什么区别A: Immutables 专注于不可变对象的生成提供了更强大的不可变特性支持而 Lombok 提供了更广泛的代码生成功能。Immutables 生成的代码更符合不可变对象的最佳实践。Q: 生成的代码在哪里A: Immutables 在编译时生成代码通常位于target/generated-sources/annotations/目录Maven或build/generated/sources/annotationProcessor/目录Gradle。Q: 如何调试生成的代码A: 可以配置 IDE 查看生成的源代码或者在构建配置中启用调试输出。Q: 支持 Kotlin 吗A: Immutables 是 Java 注解处理器但可以在 Kotlin/Java 混合项目中使用。Kotlin 有自己的data class语法但对于需要与 Java 互操作的场景Immutables 仍然很有用。 性能考虑Immutables 生成的代码经过优化具有以下性能优势预计算哈希码通过Value.Immutable(prehash true)可以在构造时预计算哈希码延迟哈希码计算使用Value.Immutable(lazyhash true)延迟哈希码计算直到首次需要时结构共享复制方法尽可能重用现有数据结构最小化内存占用生成的不可变对象通常比可变对象更节省内存 总结Immutables 是 Java 生态系统中创建不可变对象的终极工具。它通过注解处理器自动生成样板代码让你能够专注于业务逻辑而非重复的模板代码。无论你是构建微服务、数据处理管道还是任何需要线程安全数据模型的应用程序Immutables 都能显著提高开发效率和代码质量。通过本文的指南你应该已经掌握了 Immutables 的核心概念和最佳实践。现在就开始在你的项目中尝试使用 Immutables体验不可变对象带来的开发便利和运行时优势吧提示完整的示例代码可以在项目的value-fixture/src/目录中找到测试用例位于value-fixture/test/目录中。【免费下载链接】immutablesAnnotation processor to create immutable objects and builders. Feels like Guavas immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included项目地址: https://gitcode.com/gh_mirrors/im/immutables创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表