如何在java中识别对象类型

时间:2012-05-10 09:49:35

标签: java class object

  

可能重复:
  How to determine an object's class (in Java)?
  Java determine which class an object is

我有以下样本不完整的方法来比较给定对象的对象类型

public void test(Object value) {

        if (value.getClass() == Integer) {
            System.out.println("This is an Integer");
        }else if(value.getClass() == String){
            System.out.println("This is a String");
        }else if(value.getClass() == Float){
            System.out.println("This is a Fload");
        }

}

我们可以像

一样调用这个方法
test("Test");
test(12);
test(10.5f);

这种方法实际上并不起作用,请帮助我使其正常工作

4 个答案:

答案 0 :(得分:37)

您忘记了.class

if (value.getClass() == Integer.class) {
    System.out.println("This is an Integer");
} 
else if (value.getClass() == String.class) {
    System.out.println("This is a String");
}
else if (value.getClass() == Float.class) {
    System.out.println("This is a Float");
}

请注意,这种代码通常是OO设计不佳的标志。

另请注意,将对象的类与类进行比较并使用instanceof不是一回事。例如:

"foo".getClass() == Object.class

是假的,而

"foo" instanceof Object

是真的。

是否必须使用其中一个取决于您的要求。

答案 1 :(得分:14)

您可以将类标记相互比较,因此您可以使用value.getClass() == Integer.class。但是,更简单,更规范的方法是使用instanceof

    if (value instanceof Integer) {
        System.out.println("This is an Integer");
    } else if(value instanceof String) {
        System.out.println("This is a String");
    } else if(value instanceof Float) {
        System.out.println("This is a Float");
    }

注意:

  • 两者之间的唯一区别是比较类标记仅检测完全匹配,而instanceof C也匹配C的子类。但是,在这种情况下,列出的所有类都是final,因此它们没有子类。因此instanceof在这里可能没问题。
  • 正如JB Nizet所说,这种检查不是OO设计。您可以用更多OO方式解决此问题,例如

    System.out.println("This is a(n) " + value.getClass().getSimpleName());
    

答案 2 :(得分:5)

您想要instanceof

if (value instanceof Integer)

即使对于子类来说也是如此,这通常是你想要的,而且它也是空的。如果你真的需要完全相同的课程,你可以做

if (value.getClass() == Integer.class)

if (Integer.class.equals(value.getClass())

答案 3 :(得分:3)

使用value instanceof YourClass