CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-palantir-javapoet--javapoet

JavaPoet is a Java API for generating .java source files programmatically with support for modern Java features including records and sealed types

Overview
Eval results
Files

field-specifications.mddocs/

Field Specifications

FieldSpec is the specification for field declarations. It provides a fluent API for building field definitions with type, name, modifiers, initializers, annotations, and documentation.

Capabilities

Creating Field Builders

Create builders for field declarations.

/**
 * Creates a builder for a field declaration
 * @param type - The field type as TypeName
 * @param name - The field name
 * @param modifiers - Optional modifiers for the field
 * @return Builder for configuring a field
 */
static FieldSpec.Builder builder(TypeName type, String name, Modifier... modifiers);

/**
 * Creates a builder for a field declaration using reflection Type
 * @param type - The field type as reflection Type
 * @param name - The field name
 * @param modifiers - Optional modifiers for the field
 * @return Builder for configuring a field
 */
static FieldSpec.Builder builder(Type type, String name, Modifier... modifiers);

Usage Examples:

// Simple field
FieldSpec name = FieldSpec.builder(String.class, "name", Modifier.PRIVATE)
    .build();

// Field with initializer
FieldSpec count = FieldSpec.builder(int.class, "count", Modifier.PRIVATE)
    .initializer("$L", 0)
    .build();

// Parameterized type field
TypeName listOfStrings = ParameterizedTypeName.get(List.class, String.class);
FieldSpec items = FieldSpec.builder(listOfStrings, "items", Modifier.PRIVATE, Modifier.FINAL)
    .initializer("new $T<>()", ArrayList.class)
    .build();

Accessing Field Properties

Access the properties of a FieldSpec.

/**
 * Returns the field type
 * @return TypeName of the field
 */
TypeName type();

/**
 * Returns the field name
 * @return The field name
 */
String name();

/**
 * Returns the Javadoc comment
 * @return CodeBlock containing Javadoc
 */
CodeBlock javadoc();

/**
 * Returns the annotations on this field
 * @return List of AnnotationSpec
 */
List<AnnotationSpec> annotations();

/**
 * Returns the modifiers for this field
 * @return Set of Modifier
 */
Set<Modifier> modifiers();

/**
 * Returns the initializer expression
 * @return CodeBlock for field initialization (may be empty)
 */
CodeBlock initializer();

Modifying FieldSpec

Convert to a builder for modification.

/**
 * Creates a builder initialized with this field's properties
 * @return Builder for modifying this FieldSpec
 */
FieldSpec.Builder toBuilder();

FieldSpec.Builder

The builder for configuring FieldSpec instances.

Adding Documentation

Add Javadoc comments to the field.

/**
 * Adds Javadoc documentation from a format string
 * @param format - Format string for Javadoc
 * @param args - Arguments for format placeholders
 * @return This builder for chaining
 */
FieldSpec.Builder addJavadoc(String format, Object... args);

/**
 * Adds Javadoc documentation from a CodeBlock
 * @param block - CodeBlock containing Javadoc
 * @return This builder for chaining
 */
FieldSpec.Builder addJavadoc(CodeBlock block);

Usage Example:

FieldSpec maxRetries = FieldSpec.builder(int.class, "MAX_RETRIES",
        Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
    .addJavadoc("Maximum number of retry attempts before giving up.\n")
    .addJavadoc("\n")
    .addJavadoc("<p>This value is used by the retry mechanism to limit\n")
    .addJavadoc("the number of consecutive failures.\n")
    .initializer("$L", 3)
    .build();

Adding Annotations

Add annotations to the field declaration.

/**
 * Adds multiple annotations
 * @param annotationSpecs - Iterable of annotations to add
 * @return This builder for chaining
 */
FieldSpec.Builder addAnnotations(Iterable<AnnotationSpec> annotationSpecs);

/**
 * Adds an annotation from an AnnotationSpec
 * @param annotationSpec - The annotation to add
 * @return This builder for chaining
 */
FieldSpec.Builder addAnnotation(AnnotationSpec annotationSpec);

/**
 * Adds an annotation by ClassName
 * @param annotation - The annotation class name
 * @return This builder for chaining
 */
FieldSpec.Builder addAnnotation(ClassName annotation);

/**
 * Adds an annotation by Class
 * @param annotation - The annotation class
 * @return This builder for chaining
 */
FieldSpec.Builder addAnnotation(Class<?> annotation);

Usage Examples:

// Simple annotation
FieldSpec id = FieldSpec.builder(Long.class, "id", Modifier.PRIVATE)
    .addAnnotation(Id.class)
    .build();

// Annotation with members
FieldSpec email = FieldSpec.builder(String.class, "email", Modifier.PRIVATE)
    .addAnnotation(AnnotationSpec.builder(Column.class)
        .addMember("name", "$S", "email_address")
        .addMember("unique", "$L", true)
        .build())
    .build();

// Multiple annotations
FieldSpec timestamp = FieldSpec.builder(LocalDateTime.class, "createdAt", Modifier.PRIVATE)
    .addAnnotation(Column.class)
    .addAnnotation(Temporal.class)
    .addAnnotation(NotNull.class)
    .build();

Adding Modifiers

Add modifiers to the field declaration.

/**
 * Adds modifiers to the field (e.g., PRIVATE, STATIC, FINAL)
 * @param modifiers - Modifiers to add
 * @return This builder for chaining
 */
FieldSpec.Builder addModifiers(Modifier... modifiers);

Usage Examples:

// Private instance field
FieldSpec name = FieldSpec.builder(String.class, "name")
    .addModifiers(Modifier.PRIVATE)
    .build();

// Public static final constant
FieldSpec version = FieldSpec.builder(String.class, "VERSION")
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
    .initializer("$S", "1.0.0")
    .build();

// Protected field
FieldSpec logger = FieldSpec.builder(Logger.class, "logger")
    .addModifiers(Modifier.PROTECTED, Modifier.FINAL)
    .build();

Setting Initializer

Set the initializer expression for the field.

/**
 * Sets the field initializer from a format string
 * @param format - Format string for initializer expression
 * @param args - Arguments for format placeholders
 * @return This builder for chaining
 */
FieldSpec.Builder initializer(String format, Object... args);

/**
 * Sets the field initializer from a CodeBlock
 * @param codeBlock - CodeBlock for initializer expression
 * @return This builder for chaining
 */
FieldSpec.Builder initializer(CodeBlock codeBlock);

Usage Examples:

// Primitive initializer
FieldSpec count = FieldSpec.builder(int.class, "count", Modifier.PRIVATE)
    .initializer("$L", 0)
    .build();

// String initializer
FieldSpec name = FieldSpec.builder(String.class, "name", Modifier.PRIVATE)
    .initializer("$S", "default")
    .build();

// Object instantiation
FieldSpec list = FieldSpec.builder(
        ParameterizedTypeName.get(List.class, String.class),
        "items",
        Modifier.PRIVATE,
        Modifier.FINAL)
    .initializer("new $T<>()", ArrayList.class)
    .build();

// Static initializer
FieldSpec logger = FieldSpec.builder(Logger.class, "LOGGER",
        Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
    .initializer("$T.getLogger($T.class)", LoggerFactory.class, MyClass.class)
    .build();

// Complex expression
FieldSpec pattern = FieldSpec.builder(Pattern.class, "EMAIL_PATTERN",
        Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
    .initializer("$T.compile($S)", Pattern.class, "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$")
    .build();

// CodeBlock initializer
CodeBlock initializer = CodeBlock.builder()
    .add("new $T<>()", HashMap.class)
    .build();
FieldSpec config = FieldSpec.builder(Map.class, "config", Modifier.PRIVATE)
    .initializer(initializer)
    .build();

Building the FieldSpec

Build the final FieldSpec instance.

/**
 * Builds the FieldSpec with configured properties
 * @return The built FieldSpec instance
 */
FieldSpec build();

Common Patterns

Constants

// String constant
FieldSpec apiKey = FieldSpec.builder(String.class, "API_KEY",
        Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
    .initializer("$S", "your-api-key")
    .build();

// Numeric constant
FieldSpec timeout = FieldSpec.builder(int.class, "TIMEOUT_SECONDS",
        Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
    .initializer("$L", 30)
    .build();

Collections

// Immutable list
FieldSpec colors = FieldSpec.builder(
        ParameterizedTypeName.get(List.class, String.class),
        "COLORS",
        Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
    .initializer("$T.of($S, $S, $S)", List.class, "red", "green", "blue")
    .build();

// Mutable map
FieldSpec cache = FieldSpec.builder(
        ParameterizedTypeName.get(
            ClassName.get(Map.class),
            ClassName.get(String.class),
            ClassName.get(Object.class)),
        "cache",
        Modifier.PRIVATE, Modifier.FINAL)
    .initializer("new $T<>()", ConcurrentHashMap.class)
    .build();

Nullable Fields

FieldSpec optional = FieldSpec.builder(String.class, "description", Modifier.PRIVATE)
    .addAnnotation(Nullable.class)
    .build();

Serialization

FieldSpec serialVersionUID = FieldSpec.builder(long.class, "serialVersionUID",
        Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
    .initializer("$LL", 1)
    .build();

Types

class FieldSpec {
    static Builder builder(TypeName type, String name, Modifier... modifiers);
    static Builder builder(Type type, String name, Modifier... modifiers);

    TypeName type();
    String name();
    CodeBlock javadoc();
    List<AnnotationSpec> annotations();
    Set<Modifier> modifiers();
    CodeBlock initializer();
    Builder toBuilder();
    boolean equals(Object o);
    int hashCode();
    String toString();
}

class FieldSpec.Builder {
    FieldSpec.Builder addJavadoc(String format, Object... args);
    FieldSpec.Builder addJavadoc(CodeBlock block);
    FieldSpec.Builder addAnnotations(Iterable<AnnotationSpec> annotationSpecs);
    FieldSpec.Builder addAnnotation(AnnotationSpec annotationSpec);
    FieldSpec.Builder addAnnotation(ClassName annotation);
    FieldSpec.Builder addAnnotation(Class<?> annotation);
    FieldSpec.Builder addModifiers(Modifier... modifiers);
    FieldSpec.Builder initializer(String format, Object... args);
    FieldSpec.Builder initializer(CodeBlock codeBlock);
    FieldSpec build();
}

Install with Tessl CLI

npx tessl i tessl/maven-com-palantir-javapoet--javapoet@0.11.0

docs

annotation-specifications.md

array-type-names.md

class-names.md

code-blocks.md

field-specifications.md

index.md

java-files.md

method-specifications.md

name-allocator.md

parameter-specifications.md

parameterized-type-names.md

type-names.md

type-specifications.md

type-variable-names.md

wildcard-type-names.md

tile.json