如何检查类是否表示特定的基本数据类型

3
我需要确定一个特定的类是否是一个特定的基本类型,比如说 int。我找到了 Class.isPrimitive() 方法,但我并不需要检查所有的基本类型,我只需要检查一个特定的基本类型。我注意到类名和基本类型名相同,考虑使用 candidateClass.getName().equals("int") 进行检查,但这似乎是一种不好的做法(且使用了 "magic string")。那么如何正确地使用 Java API 检查一个特定的基本类型呢?

我需要确定一个特定的类是否为某个原始类型,那么 System.out.println(intClass == int.class); 有什么问题吗? - Eugene
@Eugene,它没有问题!事实上,这将是一个很好的答案。这是什么时候引入的?我在谷歌搜索原始数据类型暴露类字段的主题时没有找到任何信息。我刚刚搜索了一下(可能是错误的关键字?),但没能找到它。这真的让我惊讶,因为原始数据类型名称是关键字,我从未想过它们会有任何对象关联。就像执行 if.negate (condition) 一样奇怪。 - Dariusz
2个回答

5

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

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

有九个预定义的Class对象,用于表示八种基本类型和 void。它们由Java虚拟机创建,并具有与它们所代表的基本类型相同的名称,即 booleanbytecharshortintlongfloatdouble。 这些对象只能通过以下公共静态常量访问,并且是唯一使此方法返回 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

1
这可以大大简化为:


 intClass == int.class

这能够运行是因为Class文档中写道:

原始的Java类型(boolean、byte、char、short、int、long、float和double)以及关键字void也被表示为Class对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接