AggregateMember.java
package de.japrost.jabudget.domain.account;
/**
 * A member of an aggregate. Has a key as unique identifier.
 */
public abstract class AggregateMember {
	/** Separator between parts of a key */
	public static final String KEY_SEPARATOR = ":";
	/**
	 * Get the key of the {@link AggregateMember}.
	 *
	 * @return the key, composed with the KEY_SEPARATOR.
	 */
	public abstract String key();
	/**
	 * {@inheritDoc} <br>
	 * <strong>This implementation</strong> uses the {@link AggregateMember#key()}.
	 */
	@Override
	public int hashCode() {
		return key().hashCode();
	}
	/**
	 * {@inheritDoc} <br>
	 * <strong>This implementation</strong> uses the {@link AggregateMember#key()}.
	 */
	@Override
	public boolean equals(final Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof AggregateMember)) {
			return false;
		}
		final AggregateMember other = (AggregateMember) obj;
		if (key().equals(other.key())) {
			return true;
		}
		return false;
	}
}