| package javax.annotation.concurrent; |
| |
| import java.lang.annotation.Documented; |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| |
| /* |
| * Copyright (c) 2005 Brian Goetz |
| * Released under the Creative Commons Attribution License |
| * (http://creativecommons.org/licenses/by/2.5) |
| * Official home: http://www.jcip.net |
| */ |
| |
| /** |
| * Immutable |
| * |
| * The class to which this annotation is applied is immutable. This means that |
| * its state cannot be seen to change by callers. Of necessity this means that |
| * all public fields are final, and that all public final reference fields refer |
| * to other immutable objects, and that methods do not publish references to any |
| * internal state which is mutable by implementation even if not by design. |
| * Immutable objects may still have internal mutable state for purposes of |
| * performance optimization; some state variables may be lazily computed, so |
| * long as they are computed from immutable state and that callers cannot tell |
| * the difference. |
| * |
| * Immutable objects are inherently thread-safe; they may be passed between |
| * threads or published without synchronization. |
| */ |
| @Documented |
| @Target(ElementType.TYPE) |
| @Retention(RetentionPolicy.CLASS) |
| public @interface Immutable { |
| } |