如何使用getClass()来判断Object是否为数字?

ton*_*nga 8 java reflection

我想动态地判断Java中的Object是否为数字.我的代码如下:

if(obj.getClass().equals(Number.class)) {
    attributeTypeStr = "Numeric";
} else {
    attributeTypeStr = "Non-Numeric";
}
Run Code Online (Sandbox Code Playgroud)

Object obj可以是任何数值类型,如Integer, Float, Double等,但是,当我与测试它Integer/Float/Double,则attributeTypeStr总是返回"Non-Numeric".我想这是因为Integer/Float/Double是子类NumberNumber.class不相等Double.class.我可以用类似的东西

if(obj.getClass().equals(Integer.class) || obj.getClass().equals(Float.class) || obj.getClass().equals(Double.class))
Run Code Online (Sandbox Code Playgroud)

但它看起来太冗长了.那么有一个简单的方法吗?

Ósc*_*pez 15

用途instanceof:

if (obj instanceof Number)
Run Code Online (Sandbox Code Playgroud)


Sot*_*lis 7

使用Class#isAssignableFrom(Class)哪种状态

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口.

Integer obj = new Integer(2);       
System.out.println(Number.class.isAssignableFrom(obj.getClass()));
Run Code Online (Sandbox Code Playgroud)

因此将打印true.

它可能与你的问题无关,但只是fyi: