All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.neko233.toolchain.common.annotation.Immutable Maven / Gradle / Ivy

package com.neko233.toolchain.common.annotation;

import java.lang.annotation.*;

/**
 * The presence of this annotation indicates that the author believes the class
 * to be immutable and hence inherently thread-safe. An immutable class is one
 * where the state of an instance cannot be seen to change. As a result
 * 
    *
  • All public fields must be {@code final}
  • *
  • All public final reference fields are either {@code null} or refer to * other immutable objects
  • *
  • Constructors and methods do not publish references to any potentially * mutable internal state.
  • *
* Performance optimization may mean that instances of an immutable class may * have mutable internal state. The critical point is that callers cannot tell * the difference. For example {@link String} is an immutable class, despite * having an internal int that is non-final but used as a cache for * {@link String#hashCode()}. *

* Immutable objects are inherently thread-safe; they may be passed between * threads or published without synchronization. *

* This annotation is intended for internal use in OSHI as a temporary * workaround until it is available in {@code jakarta.annotations}. */ @Documented @Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Immutable { String tips() default ""; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy