package com.ajah.geo;

/**
 * The State interface represents a country subdivision, such as state in the US
 * or province in Canada.
 * 
 * @author Eric F. Savage <code@efsavage.com>
 */
public interface State extends Comparable<State> {

	/**
	 * The internal ID of the state. Is not dictated by any external/official
	 * nomenclature, although it may match one for the sake of readability.
	 * 
	 * Example: The ID of Massachusetts, USA might be "ma".
	 * 
	 * @return The internal ID. Should never be null or empty.
	 */
	String getId();

	/**
	 * The common name of the state.
	 * 
	 * Example: The name of Massachusetts, USA would be "Massachusetts", not the
	 * official "The Commonwealth of Massachusetts".
	 * 
	 * @return The common name of the state. Should never be null or empty.
	 */
	String getName();

	/**
	 * The public abbreviation of the state. Should match the official
	 * nomenclature, typically defined by postal services.
	 * 
	 * Example: The abbreviation of Massachusetts, USA would be "MA".
	 * 
	 * @return The public abbreviation of the state. Should never be null or
	 *         empty.
	 */
	String getAbbr();

	/**
	 * The country of which this state is a part.
	 * 
	 * Example: The country of Massachusetts, USA would be ISOCountry.USA
	 * 
	 * @return The Country object for this state's nation. Should never be null
	 *         or empty.
	 */
	Country getCountry();

}
package com.ajah.geo;

/**
 * The State interface represents a country subdivision, such as state in the US
 * or province in Canada.
 * 
 * @author Eric F. Savage <code@efsavage.com>
 */
public interface State {

	/**
	 * The internal ID of the state. Is not dictated by any external/official
	 * nomenclature, although it may match one for the sake of readability.
	 * 
	 * Example: The ID of Massachusetts, USA might be "ma".
	 * 
	 * @return The internal ID. Should never be null or empty.
	 */
	String getId();

	/**
	 * The common name of the state.
	 * 
	 * Example: The name of Massachusetts, USA would be "Massachusetts", not the
	 * official "The Commonwealth of Massachusetts".
	 * 
	 * @return The common name of the state. Should never be null or empty.
	 */
	String getName();

	/**
	 * The public abbreviation of the state. Should match the official
	 * nomenclature, typically defined by postal services.
	 * 
	 * Example: The abbreviation of Massachusetts, USA would be "MA".
	 * 
	 * @return The public abbreviation of the state. Should never be null or
	 *         empty.
	 */
	String getAbbr();

	/**
	 * The country of which this state is a part.
	 * 
	 * Example: The country of Massachusetts, USA would be ISOCountry.USA
	 * 
	 * @return The Country object for this state's nation. Should never be null
	 *         or empty.
	 */
	Country getCountry();

}
Remove comparable, causes issues with enums