检查类是否具有关联的基元类型

时间:2010-08-02 04:48:27

标签: java

是否有一种简单的方法可以检测诸如Integer或Long之类的类是否具有关联的基本类型? (例如分别为int和long)

简单来说,我并不是说维护一个Classes集合并检查该类是否存在于集合中。

2 个答案:

答案 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对象。