java - Using primitive types with ClassLoader -
i've got piece of code used turn string representations delivered class.getcanonicalname()
corresponding instances of class
. can done using classloader.loadclass("classname")
. however, fails on primitive types throwing classnotfoundexception
. solution came across this:
private class<?> stringtoclass(string classname) throws classnotfoundexception { if("int".equals(classname)) { return int.class; } else if("short".equals(classname)) { return short.class; } else if("long".equals(classname)) { return long.class; } else if("float".equals(classname)) { return float.class; } else if("double".equals(classname)) { return double.class; } else if("boolean".equals(classname)) { return boolean.class; } return classloader.getsystemclassloader().loadclass(classname); }
that seems very nasty me, there clean approach this?
since have exception this: class.forname(int.class.getname())
, way go.
checking spring framework code http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/util/classutils.html class, method resolveprimitiveclassname
, see same thing, map ;). source code: http://grepcode.com/file/repository.springsource.com/org.springframework/org.springframework.core/3.1.0/org/springframework/util/classutils.java#classutils.resolveprimitiveclassname%28java.lang.string%29
something this:
private static final map primitivetypenamemap = new hashmap(16); // , populate primitivetypenames.addall(arrays.aslist(new class[] { boolean[].class, byte[].class, char[].class, double[].class, float[].class, int[].class, long[].class, short[].class})); (iterator = primitivetypenames.iterator(); it.hasnext();) { class primitiveclass = (class) it.next(); primitivetypenamemap.put(primitiveclass.getname(), primitiveclass); }
Comments
Post a Comment