如何在java中识别对象类型

Har*_*sha 22 java class object

可能重复:
如何确定对象的类(在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");
        }

}
Run Code Online (Sandbox Code Playgroud)

我们可以这样称呼这个方法

test("Test");
test(12);
test(10.5f);
Run Code Online (Sandbox Code Playgroud)

这个方法实际上没有用,请帮我搞定

JB *_*zet 41

你忘记了.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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

"foo".getClass() == Object.class
Run Code Online (Sandbox Code Playgroud)

是假的,而

"foo" instanceof Object
Run Code Online (Sandbox Code Playgroud)

是真的.

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


Pét*_*rök 15

您可以将类令牌相互比较,以便您可以使用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");
    }
Run Code Online (Sandbox Code Playgroud)

笔记:

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

    System.out.println("This is a(n) " + value.getClass().getSimpleName());
    
    Run Code Online (Sandbox Code Playgroud)


Thi*_*ilo 5

你想要instanceof:

if (value instanceof Integer)
Run Code Online (Sandbox Code Playgroud)

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

if (value.getClass() == Integer.class)
Run Code Online (Sandbox Code Playgroud)

要么

if (Integer.class.equals(value.getClass())
Run Code Online (Sandbox Code Playgroud)