在Java中有没有一种简单的方法将基本类型对象转换为对象类型对象?给定一个类Class cl,我想将它转换为一个不包含基本类型的类。例如。
Class<?> cl = int.class;
...
if (cl.isPrimitive()) {
cl = Object of primitive
}
...
cl == Integer.class
我希望有一个方法能够适用于所有基本类型,当然我可以遍历所有基本类型,但我想知道是否有更好的解决方案。
谢谢, Max
在Java中有没有一种简单的方法将基本类型对象转换为对象类型对象?给定一个类Class cl,我想将它转换为一个不包含基本类型的类。例如。
Class<?> cl = int.class;
...
if (cl.isPrimitive()) {
cl = Object of primitive
}
...
cl == Integer.class
我希望有一个方法能够适用于所有基本类型,当然我可以遍历所有基本类型,但我想知道是否有更好的解决方案。
谢谢, Max
希望我理解正确。基本上,您想要从原始类类型映射到其包装器方法。
在某个实用程序类中实现的静态实用程序方法将是一种优雅的解决方案,因为您可以像这样使用转换:
Class<?> wrapper = convertToWrapper(int.class);
或者,声明并填充一个静态映射:
public final static Map<Class<?>, Class<?>> map = new HashMap<Class<?>, Class<?>>();
static {
map.put(boolean.class, Boolean.class);
map.put(byte.class, Byte.class);
map.put(short.class, Short.class);
map.put(char.class, Character.class);
map.put(int.class, Integer.class);
map.put(long.class, Long.class);
map.put(float.class, Float.class);
map.put(double.class, Double.class);
}
private Class<?> clazz = map.get(int.class); // usage
org.apache.commons.lang.ClassUtils.primitiveToWrapper(Class)
Guava和Apache Commons都使用一个底层的HashMap<Class<?>, Class<?>>
,虽然这并不是必要的,但可以使代码更易读。
下面这个高度优化的代码片段通过索引查找映射到一个包装器类,以恒定的时间执行相同的功能:
private static final Class[] wrappers = {
Integer.class,
Double.class,
Byte.class,
Boolean.class,
Character.class,
Void.class,
Short.class,
Float.class,
Long.class
};
@SuppressWarnings("unchecked")
public static <T> Class<T> wrap(final Class<T> clazz) {
if (!clazz.isPrimitive()) return clazz;
final String name = clazz.getName();
final int c0 = name.charAt(0);
final int c2 = name.charAt(2);
final int mapper = (c0 + c0 + c0 + 5) & (118 - c2);
return (Class<T>) wrappers[mapper];
}
这里涉及到一些代码高尔夫,所以除非你知道自己在做什么,否则不要重新排序类名 ;)