如何在 java 中标识对象类型

2022-08-31 22:20:36

可能的重复:
如何确定对象的类(在Java中)?
Java 确定对象是哪个类

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

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 Float");
        }

}

该方法可以称为:

test("Test");
test(12);
test(10.5f);

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


答案 1

您忘记了 :.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

是真的。

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


答案 2

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

    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 CCfinalinstanceof
  • 正如JB Nizet所说,这种检查不是OO设计。您可以以更直观的方式解决此问题,例如:

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