Strategies are registered before they can be used; the registration maps a particular class to a strategy instance. The strategy instance will be used when the subject class matches the registered class, or the subject class inherits from the registered class.
This means that a search must be made that walks the inheritance tree (upwards from the subject class) to find a registered mapping.
In addition, strategies can be registered against interfaces. Searching of interfaces occurs after searching of classes. The exact order is:
The first match terminates the search.
The StrategyRegistry caches the results of search; a subsequent search for the same subject class will be resolved immediately.
StrategyRegistry does a minor tweak of the "natural" inheritance. Normally, the parent class of an object array (i.e., Foo[]
) is simply Object
, even though you may assign Foo[]
to a variable of type Object[]
. StrategyRegistry "fixes" this by searching for Object[]
as if it was the superclass of any object array. This means that the search path for Foo[]
is Foo[]
, Object[]
, then a couple of interfaces {@link java.lang.Cloneable}, {@link java.io.Serializable}, etc. that are implicitily implemented by arrays), and then, finally, Object
This tweak doesn't apply to arrays of primitives, since such arrays may not be assigned to Object[]
.
@author Howard M. Lewis Ship
@see org.apache.hivemind.lib.util.StrategyRegistryImpl
@since 1.1
|
|
|
|
|
|
|
|
|
|