Class Lookup

A general registry permitting clients to find instances of services
(implementation of a given interface).
This class is inspired by the
Jini
registration and lookup mechanism. The difference is that the methods do
not throw checked exceptions (as they usually work only locally and not over the network)
and that the Lookup API concentrates on the lookup, not on the registration
(although getDefault() is strongly encouraged to support
Lookups.metaInfServices(java.lang.ClassLoader) for registration in addition to whatever
else it decides to support).

For a general talk about the idea behind the lookup pattern please see

Constructor Detail

Lookup

Method Detail

getDefault

Static method to obtain the global lookup in the whole system.
The actual returned implementation can be different in different
systems, but the default one is based on
Lookups.metaInfServices(java.lang.ClassLoader)
with the context classloader of the first caller. Each system is
adviced to honor this and include some form of metaInfServices
implementation in the returned lookup as usage of META-INF/services
is a JDK standard.

lookup

Look up an object matching a given interface.
This is the simplest method to use.
If more than one object matches, the first will be returned.
The template class may be a class or interface; the instance is
guaranteed to be assignable to it.

Parameters:

clazz - class of the object we are searching for

Returns:

an object implementing the given class or null if no such
implementation is found

lookup

The general lookup method. Callers can get list of all instances and classes
that match the given template, request more info about
them in form of Lookup.Item and attach a listener to
this be notified about changes. The general interface does not
specify whether subsequent calls with the same template produce new
instance of the Lookup.Result or return shared instance. The
prefered behaviour however is to return shared one.

lookupResult

Find a result corresponding to a given class.
Equivalent to calling lookup(Lookup.Template) but slightly more convenient.
Subclasses may override this method to produce the same semantics more efficiently.