首页 > 解决方案 > 如何检查一个类是否代表一个特定的原始类型

问题描述

我需要确定一个特定的类是否是一个特定的原始类型,int就我而言。我找到了Class.isPrimitive()方法,但我不需要检查所有原语,我需要一个特定的原语。我注意到类名等于原始名称,我考虑检查candidateClass.getName().equals("int")- 但这似乎是一种不好的做法(以及“魔术字符串”的使用)。

如何使用 Java API 正确检查特定的原始类型?

标签: javaprimitive-types

解决方案


每个原始类型的每个包装器都提供一个静态字段,其中包含这些包装器的原始类型类。例如:Integer.TYPE

Class.isPrimitive 的文档提供了有关在 Java 中实现原始类型类的信息:

有九个预定义的 Class 对象来表示八种原始类型和 void。它们由 Java 虚拟机创建,并且与它们所代表的原始类型具有相同的名称,即 boolean、byte、char、short、int、long、float 和 double。这些对象只能通过以下公共静态最终变量访问,并且是此方法返回 true 的唯一 Class 对象。

一些代码供参考:

public class PrimitiveClassTest {
    static class Foo{
       public int a;
    }
    
    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        Class<?> intClass = Foo.class.getField("a").getType();
        System.out.println("obj.int field class: "+intClass);
        System.out.println("Integer.TYPE class:  "+Integer.TYPE);
        System.out.println("are they equal?      "+Integer.TYPE.equals(intClass));
    }
}

这给出了以下结果:

obj.int field class: int
Integer.TYPE class:  int
are they equal?      true

推荐阅读