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:30 +0200
changeset 233 15d31c98a129
parent 228 984a01bbac90
permissions -rw-r--r--
Making the examples more appropriate for the book
     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     
     8     private Registry() {
     9     }
    10 
    11     // BEGIN: anagram.registry
    12     private static Map<Class<?>,Object[]> instances = 
    13         new LinkedHashMap<Class<?>,Object[]>();
    14     public static void registerClass(Class<?> impl) {
    15         instances.put(impl, new Object[1]);
    16     }
    17     
    18     public static <T> T find(Class<T> whatType) {
    19         for (Map.Entry<Class<?>, Object[]> entry : instances.entrySet()) {
    20             if (whatType.isAssignableFrom(entry.getKey())) {
    21                 if (entry.getValue()[0] == null) {
    22                     try {
    23                         entry.getValue()[0] = entry.getKey().newInstance();
    24                     } catch (Exception ex) {
    25                         throw new IllegalStateException(ex);
    26                     }
    27                 }
    28                 return whatType.cast(entry.getValue()[0]);
    29             }
    30         }
    31         return null;
    32     }
    33     // END: anagram.registry
    34 }
    35