是否有一种简单的方法可以检测诸如Integer或Long之类的类是否具有关联的基本类型? (例如分别为int和long)
简单来说,我并不是说维护一个Classes集合并检查该类是否存在于集合中。
答案 0 :(得分:3)
简单来说,我并不是说维护一个Classes集合并检查该类是否存在于集合中。
但这很容易。 Java有固定数量的原始类型(7,如果我还记得它们的话),每个类型都只对应一个类。检查7个元素数组的成员资格非常快速和容易,或者您可以将它们放在Set
中并使用它来检查O(1)时间内的成员资格。我不确定哪种方式会更快。
如果您要问Java是否有内置方法(在标准API中)来执行此操作,我不这么认为。但如果有一个,它可能只是检查该集合或7个元素的数组的成员资格。
答案 1 :(得分:0)
是的,有一种 easy 方式:
public class ClassUtils {
private static final Set<Class<?>> wrapperClasses = new HashSet<Class<?>>();
static {
wrapperClasses.add(Integer.class);
... there are a set number of wrapper classes - add them all here
}
然后,创建一个辅助方法:
public static boolean isWrapperForPrimitive(Class<?> klass) {
return wrapperClasses.contains(klass);
}
}
反过来很容易,Class.isPrimitive():
确定指定的Class对象是否表示基本类型。
有九个预定义的Class对象来表示八种基本类型和void。它们由Java虚拟机创建,并且与它们表示的基本类型具有相同的名称,即boolean,byte,char,short,int,long,float和double。
这些对象只能通过以下public static final变量访问,并且是此方法返回true的唯一Class对象。