package com.ericfeminella.utils
{
import flash.errors.IllegalOperationError;
/**
*
* All static class which provides an API for enforcing an pseudo
* abstract class is never to have an instance instantiated
*
* @example The following example demonstrates how to utilize
* <code>AbstractEnforcer</code> to ensure a pseudo-abstract
* class is never instantiated
*
* <listing version="3.0">
*
* package
* {
* import com.ericfeminella.utils.AbstractEnforcer;
*
* public class Abstract
* {
* public function Abstract()
* {
* AbstractEnforcer.enforce(this, Abstract);
* }
* }
* }
* </listing>
*
* @see flash.utils.getQualifiedClassName
*
*/
public class AbstractEnforcer
{
/**
*
* Provides a mechanism for enforcing a pseudo-abstract class
* is never instantiated
*
* <p>
* When an attempt to instantiate an instance of an Abstract
* class is made an exception is thrown as the instance constructor
* is checked against the Class type which has been specified.
* </p>
*
* @param instance which is to be compared against the abstract type
* @param abstract type which is to be compared against the instance
*
*/
public static function enforce(instance:Object, type:Class) : void
{
if (instance.constructor == type)
{
throw new IllegalOperationError(type + " is an AbstractClass and can not be instantiated");
}
}
}
}