/* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.concepts; /** * Immutable Object - object does not change its state during lifecycle. * * <p> * Marker interface for objects which are immutable. This interface should be * used directly on objects, preferably final, which are eligible for the * JSR-305 @Immutable annotation and objects implementing this interface are * required to abide to interface contract specified by @Immutable. * * <p> * The reason for the existence of this interface is twofold: unlike @Immutable, it is * visible at runtime and objects can be quickly checked for compliance using a * quick 'instanceof' check. This is useful for code which needs to capture a * point-in-time snapshot of otherwise unknown objects -- a typical example * being logging/tracing systems. Such systems would normally have to rely on * serializing the object to get a stable checkpoint. Objects marked with this * interface are guaranteed to remain stable, thus already being a checkpoint * for all intents and purposes, so aside from retaining a reference no further * action on them is necessary. * * <p> * Implementations of this interface must not change any public state during * their whole lifecycle. * * <p> * This interface is mutually exclusive with {@link Mutable} and other * {@link MutationBehaviour}s. * * @author Robert Varga * @author Tony Tkacik * */ public interface Immutable extends MutationBehaviour<Immutable> { }