Java 如何检查类是否表示特定的基元类型
我需要确定一个特定的类是否是一个特定的基元类型,在我的例子中是Java 如何检查类是否表示特定的基元类型,java,primitive-types,Java,Primitive Types,我需要确定一个特定的类是否是一个特定的基元类型,在我的例子中是int。我找到了Class.isPrimitive()方法,但我不需要检查所有的原语,我需要一个特定的原语。我注意到类名等于原语名,我考虑检查candidateClass.getName().equals(“int”)——但这似乎是一种不好的做法(以及“魔术字符串”用法) 如何使用Java API正确检查特定的基元类型?每个基元类型的包装器都提供一个静态字段,其中包含这些包装器的基元类型类。例如:Integer.TYPE Class.
int
。我找到了Class.isPrimitive()
方法,但我不需要检查所有的原语,我需要一个特定的原语。我注意到类名等于原语名,我考虑检查candidateClass.getName().equals(“int”)
——但这似乎是一种不好的做法(以及“魔术字符串”用法)
如何使用Java API正确检查特定的基元类型?每个基元类型的包装器都提供一个静态字段,其中包含这些包装器的基元类型类。例如:
Integer.TYPE
Class.isPrimitive的文档提供了有关在Java中实现基元类型类的信息:
有九个预定义的类对象来表示八个基本类型和void。它们是由Java虚拟机创建的,与它们所表示的基本类型具有相同的名称,即boolean、byte、char、short、int、long、float和double。
这些对象只能通过以下公共静态final变量访问,并且是此方法返回true的唯一类对象
一些代码供参考:
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));
}
}
这可以大大简化为:
intClass == int.class
这是因为类
文档说明:
基本Java类型(boolean、byte、char、short、int、long、float和double)以及关键字void也表示为类对象
我需要确定一个特定的类是否是一个特定的基元类型,那么它有什么问题:
System.out.println(intClass==int.class)代码>?@Eugene没问题!事实上,这将是一个很好的答案。这是什么时候推出的?我在谷歌上找不到任何关于原语确实公开类字段的主题的信息。我现在在谷歌上搜索了一下(可能是错误的关键词吧?),没找到。这确实让我感到惊讶,因为原始名称是关键字,我永远不会期望它们有任何对象关联。这就像做if.negate(条件)
。奇怪的
intClass == int.class