scolebourne 2003/10/23 14:03:44 Modified: lang/src/java/org/apache/commons/lang ClassUtils.java lang/src/test/org/apache/commons/lang ClassUtilsTest.java Log: Add primitiveToWrapper() bug 23683, from Norm Deane Revision Changes Path 1.23 +36 -2 jakarta-commons/lang/src/java/org/apache/commons/lang/ClassUtils.java Index: ClassUtils.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/ClassUtils.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- ClassUtils.java 7 Sep 2003 14:32:34 -0000 1.22 +++ ClassUtils.java 23 Oct 2003 21:03:43 -0000 1.23 @@ -54,8 +54,10 @@ package org.apache.commons.lang; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; /** * <p>Operates on classes without using reflection.</p> * @@ -64,6 +66,7 @@ * * @author Stephen Colebourne * @author Gary Gregory + * @author Norm Deane * @since 2.0 * @version $Id$ */ @@ -89,6 +92,21 @@ */ public static final String INNER_CLASS_SEPARATOR = String.valueOf(INNER_CLASS_SEPARATOR_CHAR); + /** + * Maps primitive <code>Class</code>es to their corresponding wrapper <code>Class</code>. + */ + private static Map primitiveWrapperMap = new HashMap(); + static { + primitiveWrapperMap.put(Boolean.TYPE, Boolean.class); + primitiveWrapperMap.put(Byte.TYPE, Byte.class); + primitiveWrapperMap.put(Character.TYPE, Character.class); + primitiveWrapperMap.put(Short.TYPE, Short.class); + primitiveWrapperMap.put(Integer.TYPE, Integer.class); + primitiveWrapperMap.put(Long.TYPE, Long.class); + primitiveWrapperMap.put(Double.TYPE, Double.class); + primitiveWrapperMap.put(Float.TYPE, Float.class); + } + /** * <p>ClassUtils instances should NOT be constructed in standard programming. * Instead, the class should be used as @@ -514,12 +532,28 @@ return toClass.isAssignableFrom(cls); } + /** + * <p>Converts the specified primitive Class object to its corresponding + * wrapper Class object.</p> + * + * @param cls the class to convert, may be null + * @return the wrapper class for <code>cls</code> or <code>cls</code> if + * <code>cls</code> is not a primitive. <code>null</code> if null input. + */ + public static Class primitiveToWrapper(Class cls) { + Class convertedClass = cls; + if (cls != null && cls.isPrimitive()) { + convertedClass = (Class) primitiveWrapperMap.get(cls); + } + return convertedClass; + } + // Inner class // ---------------------------------------------------------------------- /** * <p>Is the specified class an inner class or static nested class.</p> * - * @param cls the class to check + * @param cls the class to check, may be null * @return <code>true</code> if the class is an inner or static nested class, * false if not or <code>null</code> */ 1.7 +33 -1 jakarta-commons/lang/src/test/org/apache/commons/lang/ClassUtilsTest.java Index: ClassUtilsTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/ClassUtilsTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ClassUtilsTest.java 18 Aug 2003 02:22:25 -0000 1.6 +++ ClassUtilsTest.java 23 Oct 2003 21:03:44 -0000 1.7 @@ -379,6 +379,38 @@ assertEquals("boolean -> boolean", true, ClassUtils.isAssignable(Boolean.TYPE, Boolean.TYPE)); } + public void testPrimitiveToWrapper() { + + // test primitive classes + assertEquals("boolean -> Boolean.class", + Boolean.class, ClassUtils.primitiveToWrapper(Boolean.TYPE)); + assertEquals("byte -> Byte.class", + Byte.class, ClassUtils.primitiveToWrapper(Byte.TYPE)); + assertEquals("char -> Character.class", + Character.class, ClassUtils.primitiveToWrapper(Character.TYPE)); + assertEquals("short -> Short.class", + Short.class, ClassUtils.primitiveToWrapper(Short.TYPE)); + assertEquals("int -> Integer.class", + Integer.class, ClassUtils.primitiveToWrapper(Integer.TYPE)); + assertEquals("long -> Long.class", + Long.class, ClassUtils.primitiveToWrapper(Long.TYPE)); + assertEquals("double -> Double.class", + Double.class, ClassUtils.primitiveToWrapper(Double.TYPE)); + assertEquals("float -> Float.class", + Float.class, ClassUtils.primitiveToWrapper(Float.TYPE)); + + // test a few other classes + assertEquals("String.class -> String.class", + String.class, ClassUtils.primitiveToWrapper(String.class)); + assertEquals("ClassUtils.class -> ClassUtils.class", + org.apache.commons.lang.ClassUtils.class, + ClassUtils.primitiveToWrapper(org.apache.commons.lang.ClassUtils.class)); + + // test null + assertNull("null -> null", + ClassUtils.primitiveToWrapper(null)); + } + // public static List getAssignableFrom(List classes, Class superclass) { // public static boolean isAssignable(Class[] classArray, Class[] toClassArray) { // public static boolean isAssignable(Class cls, Class toClass) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]