gpt4 book ai didi

java - 将基本类型与 ClassLoader 一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:45 25 4
gpt4 key购买 nike

我有一段代码用于将 Class.getCanonicalName() 提供的字符串表示形式转换为它们对应的 Class 实例。这通常可以使用 ClassLoader.loadClass("className") 来完成。但是,它在抛出 ClassNotFoundException 的原始类型上失败。我遇到的唯一解决方案是这样的:

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);
}

这对我来说似乎非常令人讨厌,那么有什么干净的方法吗?

最佳答案

因为你有一个异常(exception):Class.forName(int.class.getName()),我会说这是要走的路。

正在检查 Spring 框架代码 http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/util/ClassUtils.html class, method resolvePrimitiveClassName ,你会看到他们做同样的事情,但是有一个 map ;)。源代码: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

像这样:

private static final Map primitiveTypeNameMap = new HashMap(16);
// and populate like this
primitiveTypeNames.addAll(Arrays.asList(new Class[] {
boolean[].class, byte[].class, char[].class, double[].class,
float[].class, int[].class, long[].class, short[].class}));
for (Iterator it = primitiveTypeNames.iterator(); it.hasNext();) {
Class primitiveClass = (Class) it.next();
primitiveTypeNameMap.put(primitiveClass.getName(), primitiveClass);
}

关于java - 将基本类型与 ClassLoader 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com