Skip to content

Default-Styles and Helper-Classes for common use cases of Immutables.

License

Notifications You must be signed in to change notification settings

Mercateo/default-immutables

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Coverage Status MavenCentral

com.mercateo:default-immutables

Default-Styles and Helper-Classes for common use cases of Immutables, a framework based on annotation processors to generate simple, safe and consistent value objects

Data class style

After defining an immutable with data class style

@Value.Immutable
@DataClass
public interface ExampleDataClass {
    String getName();

    int counter();

    static ImmutableExampleDataClass.Builder builder() {
        return ImmutableExampleDataClass.builder();
    }
}

there is a builder

    ExampleDataClass dataClass = ExampleDataClass.builder()
            .name("foo")
            .counter(123)
            .build();

which even has a copy function:

    ExampleDataClass otherDataClass = ExampleDataClass.builder()
            .from(dataClass)
            .name("bar")
            .build();

Value style

After defining an immutable with data class style

@Value.Immutable
@ValueStyle
public interface _ExampleValue {
    String getName();

    int counter();
}

there is a builder

    ExampleValue value = ExampleValue.builder()
            .name("foo")
            .counter(123)
            .build();

which has a copy function in the builder:

    ExampleValue otherValue = ExampleValue.builder()
            .from(value)
            .name("bar")
            .build();

or a with method

    ExampleValue anotherValue = value.withName("baz");

Tuple style

After defining an immutable with tuple style

@Value.Immutable
@TupleStyle
public interface ExampleTuple {
    String name();

    int count();

    static ImmutableExampleTuple of(String name, int count) {
        return ImmutableExampleTuple.of(name, count);
    }
}

there is a static constructor method

    ExampleTuple tuple = ExampleTuple.of("foo", 123);

Typed Objects

Typed "primitives" can be easily defined:

@Value.Immutable
@Wrapped
public abstract class _ExampleTypedString extends Wrapper<String> {}

and used:

    ExampleTypedString typedString = ExampleTypedString.of("foo");

value(), .hashCode(), .equals(<other>) and .toString() are already there.

About

Default-Styles and Helper-Classes for common use cases of Immutables.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages