如何在java中识别对象类型

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

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

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

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

你忘了.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 

是真的。

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

您可以将类令牌相互比较,因此您可以使用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匹配instanceof C的子类。 但是,在这种情况下,列出的所有类都是final类,因此它们没有子类。 因此, instanceof在这里可能很好。
  • 正如JB Nizet所说,这种检查不是OO设计。 您可以以更OO的方式解决此问题,例如

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

使用value instanceof YourClass

你想要instanceof

 if (value instanceof Integer) 

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

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

要么

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