java - 如何检查一个类是否代表一个特定的原始类型
问题描述
我需要确定一个特定的类是否是一个特定的原始类型,int
就我而言。我找到了Class.isPrimitive()
方法,但我不需要检查所有原语,我需要一个特定的原语。我注意到类名等于原始名称,我考虑检查candidateClass.getName().equals("int")
- 但这似乎是一种不好的做法(以及“魔术字符串”的使用)。
如何使用 Java API 正确检查特定的原始类型?
解决方案
每个原始类型的每个包装器都提供一个静态字段,其中包含这些包装器的原始类型类。例如: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
推荐阅读
- c++ - 即使我的 main 没有调用任何东西(C++),我的可执行文件也很大
- python - 输出打印在同一行 - python
- c++ - 信号和除零
- powershell - Where-Object 的意外行为
- parallel-processing - 代码块失败的消息运行你好代码
- node.js - 如何告诉 Jest 空间实际上是空间?
- cmake - CMake 安装出现问题,正在中止构建。CMake 可执行文件是 cmake
- php - 如何短语/分解 XML 数据?
- flutter - 如何向 Material App Flutter 添加多个主题参数?
- windows - 从 WMIC 查询中排除一些输出