samples/componentinjection/anagram-modular/src-app-register-general/org/apidesign/anagram/app/registergeneral/Registry.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:07:15 +0200
changeset 228 984a01bbac90
child 233 15d31c98a129
permissions -rw-r--r--
Showing how such a general registry might look like
     1 package org.apidesign.anagram.app.registergeneral;
     2 
     3 import java.util.LinkedHashMap;
     4 import java.util.Map;
     5 
     6 public final class Registry {
     7     private static Map<Class<?>,Object[]> instances = new LinkedHashMap<Class<?>,Object[]>();
     8     
     9     private Registry() {
    10     }
    11     
    12     public static void registerClass(Class<?> impl) {
    13         instances.put(impl, new Object[1]);
    14     }
    15     
    16     public static <T> T find(Class<T> whatType) {
    17         for (Map.Entry<Class<?>, Object[]> entry : instances.entrySet()) {
    18             if (whatType.isAssignableFrom(entry.getKey())) {
    19                 if (entry.getValue()[0] == null) {
    20                     try {
    21                         entry.getValue()[0] = entry.getKey().newInstance();
    22                     } catch (Exception ex) {
    23                         throw new IllegalStateException(ex);
    24                     }
    25                 }
    26                 return whatType.cast(entry.getValue()[0]);
    27             }
    28         }
    29         return null;
    30     }
    31 }
    32