# Diff.java

    package org.codefilarete.stalactite.engine.diff;

    import java.util.Set;

    /**
     * A difference of a comparison made by {@link CollectionDiffer#diffSet(Set, Set)}
     *
     * On {@link State#ADDED} instances, only {@link #getReplacingInstance()} is set ({@link #getSourceInstance()} is null.
     * On {@link State#REMOVED} instances, only {@link #getSourceInstance()} is set ({@link #getReplacingInstance()} is null.
     * On {@link State#HELD} instances, both {@link #getSourceInstance()} and ({@link #getReplacingInstance()} are set, because entity
     * {@link #equals(Object)} method may be implemented without taking into account all entity fields so 2 of them may differ on some fields while
     * remaining equals, such other fields difference shall interest database to update modified columns.
     */
    public class Diff<C> extends AbstractDiff<C> {

    	/**
    	 * Constructor without given index (minimal constructor).
    	 *
    	 * @param state the kind of difference
    	 * @param sourceInstance initial instance
    	 * @param replacingInstance replacing instance (may differ from source on attributes except id)
    	 */
    	public Diff(State state, C sourceInstance, C replacingInstance) {
    		super(state, sourceInstance, replacingInstance);
    	}
    }