Annotation Type FreeBuilder


  • @Target(TYPE)
    @Retention(SOURCE)
    public @interface FreeBuilder
    Annotates a type that has an auto-generated builder.

    Quick start

    Create your value type (e.g. Person) as an interface or abstract class, containing an abstract accessor method for each desired field. This accessor must be non-void, parameterless, and start with 'get' or 'is'. Add the @FreeBuilder annotation to your class, and it will automatically generate an implementing class and a package-visible builder API (Person_Builder), which you must subclass. For instance:

    @FreeBuilder
     public interface Person {
       /** Returns the person's full (English) name. */
       String getName();
       /** Returns the person's age in years, rounded down. */
       int getAge();
       /** Builder of {@link Person} instances. */
       class Builder extends Person_Builder { }
     }

    You can now use the Builder class:

    Person person = new Person.Builder()
         .setName("Phil")
         .setAge(31)
         .build();
     System.out.println(person);  // Person{name=Phil, age=31}
    See Also:
    Full documentation at freebuilder.inferred.org