https://github.com/immutables/immutables
Annotation processor to create immutable objects and builders. Feels like Guava's immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included
https://github.com/immutables/immutables
annotation-processor builder gson guava immutable-collections immutable-datastructures immutable-objects immutables jackson java
Last synced: 6 days ago
JSON representation
Annotation processor to create immutable objects and builders. Feels like Guava's immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included
- Host: GitHub
- URL: https://github.com/immutables/immutables
- Owner: immutables
- License: apache-2.0
- Created: 2013-07-07T13:48:23.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2025-03-31T17:39:02.000Z (14 days ago)
- Last Synced: 2025-04-01T19:06:42.716Z (13 days ago)
- Topics: annotation-processor, builder, gson, guava, immutable-collections, immutable-datastructures, immutable-objects, immutables, jackson, java
- Language: Java
- Homepage: http://immutables.org
- Size: 12.4 MB
- Stars: 3,473
- Watchers: 87
- Forks: 281
- Open Issues: 443
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - immutables/immutables - Annotation processor to create immutable objects and builders. Feels like Guava's immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included (Java)
- awesome-ccamel - immutables/immutables - Annotation processor to create immutable objects and builders. Feels like Guava's immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integrations included (Java)
README
Read full documentation at http://immutables.org

## Modern usage style, aka "sandwich"
```java
// Define abstract value type using interface, abstract class or annotation
@Value.Immutable
public interface ValueObject extends WithValueObject {
// WithValueObject is not yet generated, We extend With* to inherit `with*` method signatures
String name();
List counts();
Optional description();class Builder extends ImmutableValueObject.Builder {}
// ImmutableValueObject.Builder will be generated and
// our builder will inherit and reexport methods as its own.
// Static nested Builder will inherit all the public method
// signatures of ImmutableValueObject.Builder
}// Use generated immutable implementation and builder
ValueObject v =
new ValueObject.Builder()
.name("Nameless")
.description("present")
.addCounts(1)
.addCounts(2)
.build();v = v.withName("Doe");
//fetch values via accessors
List counts = v.counts();
Optional description = v.description();
```ImmutableValueObject then would not be used outside generated type. See about this and other generation [styles here](https://immutables.github.io/style.html)
See [releases](https://github.com/immutables/immutables/releases) tab for release history. Archived [changelog](.archive/CHANGELOG.md) for earlier releases.