java 判断 是否 class 您所在的位置:网站首页 object判断类型 java 判断 是否 class

java 判断 是否 class

2023-08-12 16:57| 来源: 网络整理| 查看: 265

我想动态判断Java中的对象是否为数字。 我的代码如下:

if(obj.getClass().equals(Number.class)) {

attributeTypeStr ="Numeric";

} else {

attributeTypeStr ="Non-Numeric";

}

Object obj可以是任何数字类型,例如Integer, Float, Double等。但是当我用Integer/Float/Double测试它时,attributeTypeStr总是返回"Non-Numeric"。 我猜这是因为Integer/Float/Double是Number的子类,但是Number.class不等于Double.class。 我可以用类似的东西

if(obj.getClass().equals(Integer.class) || obj.getClass().equals(Float.class) || obj.getClass().equals(Double.class))

但这看起来太冗长。 那么有没有简单的方法可以做到这一点?

为什么不obj instanceof Number?

使用instanceof:

if (obj instanceof Number)

谢谢。这是非常简单直接的。

保持简单,最好的是:)

老实说,我很久没有使用instanceof了,我忘记了它的存在。

使用Class#isAssignableFrom(Class)指出

Determines if the class or interface represented by this Class object

is either the same as, or is a superclass or superinterface of, the

class or interface represented by the specified Class parameter.

在做

Integer obj = new Integer(2);

System.out.println(Number.class.isAssignableFrom(obj.getClass()));

因此将打印true。

它可能与您的问题无关,而仅是:

instanceof和Class.isAssignableFrom(...)之间有什么区别?

尽管我不会对此表示怀疑,但是Number的instanceof会更简单吗? (Nit选择)如果我仅具有Class引用,则个人使用ID,所以,是的,它有其用途

@MadProgrammer是的,只提供选项。

总是有选择权;)

如果类型信息在运行时不可用,是否会中断?(OP框架也会中断,但以供将来参考)

@SotiriosDelimanolis:这提供了另一个选择。似乎isAssignableFrom()比instanceof更加灵活和强大,对吗?

@tonga它增加了可能性。例如,如果您不知道要尝试专门分配给Number,而是分配给对象的类,则可以仅对该对象分配getClass()并在返回的Class< ? >实例上调用isAssignableFrom()。

@hexafraction哪些类型的信息?

@hexafraction:什么情况会打破这种情况? isAssignableFrom()可以在运行时处理类类型,对吗?

请注意,如果您尝试测试基本类型的类对象,则此方法不起作用。例如:Number.class.isAssignableFrom(int.class)为false。 (这是否无关紧要,如果您测试保存在Object引用中的值,仅当您测试从某处获得的类对象时才有意义。)

使用Class的isInstance()方法

if(Number.class.isInstance(obj)){

}

根据Class#isInstance()

Determines if the specified Object is assignment-compatible with the object represented by this Class. This method is the dynamic equivalent of the Java language instanceof operator. The method returns true if the specified Object argument is non-null and can be cast to the reference type represented by this Class object without raising a ClassCastException. It returns false otherwise.

检查其超类。 这是有效的,因为这些类是直接超类:

if(obj.getClass().getSuperclass().equals(Number.class)){

//logic

}

或对于非直接的,请检查Number.class.isAssignableFrom(obj.getClass())。 对于数字,因为现有的Number子类是最终的,所以这不是什么大问题。 在普通语言中,这可能会由于缺少类型信息而中断。

看来我需要使用o.getClass().getSuperclass().equals(Number.class)使其正确。

@tonga是的,我的错字。抱歉。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有