Mega Code Archive

 
Categories / Java Tutorial / Reflection
 

Demonstrates Dynamic class type checking

/*  *     file: DynamicTypeChecking.java  *  package: oreilly.hcj.reflection  *  * This software is granted under the terms of the Common Public License,  * CPL, which may be found at the following URL:  * http://www-124.ibm.com/developerworks/oss/CPLv1.0.htm  *  * Copyright(c) 2003-2005 by the authors indicated in the @author tags.  * All Rights are Reserved by the various authors.  *  ########## DO NOT EDIT ABOVE THIS LINE ########## */ import java.io.Serializable; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /**  * Demonstrates Dynamic class type checking.  *   * @author <a href=mailto:kraythe@arcor.de>Robert Simmons jr. (kraythe)</a>  * @version $Revision: 1.3 $  */ public class DynamicTypeChecking {   /**    * Demonstrates usage of <tt>isAssignableFrom</tt> on a class object.    *     * @param dataType    *          The data type to check.    *     * @return The value <tt>true</tt> if the class is a descendant of    *         <tt>java.lang.Number</tt> or <tt>false</tt> if it isnt.    */   public static boolean isNumber(final Class dataType) {     return Number.class.isAssignableFrom(dataType);   }   /**    * Demonstration Method.    *     * @param args    *          Command Line arguments.    */   public static void main(final String[] args) {     final Set classes = new HashSet();     classes.add(Class.class);     classes.add(Comparable.class);     classes.add(Serializable.class);     classes.add(Integer.class);     classes.add(int.class);     classes.add(Float[].class);     classes.add(String.class);     classes.add(double[].class);     classes.add(boolean.class);     System.out.println("Using isAssignableFrom:");     useAssignable(classes);     System.out.println("\nUsing isInstance:");     useIsInstance(classes);   }   /**    * Demonstrates use of <tt>isAssignableFrom</tt> on objects in a set.    *     * @param inputSet    *          The set to check.    */   public static void useAssignable(final Set inputSet) {     final Iterator iter = inputSet.iterator();     Object obj = null;     while (iter.hasNext()) {       obj = iter.next();       if (obj != null) {         if (Number.class.isAssignableFrom(obj.getClass())) {           System.out.println(obj);         }       }     }   }   /**    * Demonstrates usage of <tt>isInstance</tt> on objects in a set.    *     * @param inputSet    *          The set to check.    */   public static void useIsInstance(final Set inputSet) {     final Iterator iter = inputSet.iterator();     Object obj = null;     while (iter.hasNext()) {       obj = iter.next();       if (Number.class.isInstance(obj)) {         System.out.println(obj);       }     }   }   /**    * Demonstration method for class comparison based on passed class and object.    *     * @param dataType    *          The data type to check.    * @param inputSet    *          The input set to check.    *     * @throws NullPointerException    *           If the data type given is null.    */   public static void useIsInstance2(final Class dataType, final Set inputSet) {     if (dataType == null) {       throw new NullPointerException();     }     final Iterator iter = inputSet.iterator();     Object obj = null;     while (iter.hasNext()) {       obj = iter.next();       if (dataType.isInstance(obj)) {         System.out.println(obj);       }     }   }   /**    * A bad version of useInstance. If you uncomment this method you will get a    * compiler error.    */   // public static void useIsInstance3(final Class dataType, final Set inputSet)   // {   // final Iterator iter = inputSet.iterator();   // Object obj = null;   // while (iter.hasNext()) {   // obj = iter.next();   // if (obj instanceof dataType) {   // System.out.println(obj);   // } } /* ########## End of File ########## */