繁体   English   中英

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

[英]Checking if a class has an associated primitive type

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

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

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

但这很容易。 Java有固定数量的原始类型(7,如果我还记得它们的话),每个类型都只对应一个类。 检查7个元素数组的成员资格非常快速和容易,或者您可以将它们放入Set并使用它来检查O(1)时间内的成员资格。 我不确定哪种方式会更快。

如果您要问Java是否有内置方法(在标准API中)来执行此操作,我不这么认为。 但如果有一个,它可能只是检查该集合或7个元素的数组的成员资格。

是的,有一个简单的方法:

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。

这些对象只能通过以下公共静态final变量访问,并且是此方法返回true的唯一Class对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM