Java instanceof implements/extends

Jaa*_*nus 5 java instanceof

instanceof如何正常工作?当我有一个扩展并实现彼此的对象层次结构时,某些事物的实例是否通过这两条线工作?

例如,我想知道如果我的对象是实例ListArrayListCollection

我检查了这棵树,http://docs.oracle.com/javase/6/docs/api/java/util/package-tree.html

而且他们似乎完全属于Object当下,但我认为我需要的是AbstractCollection,甚至是正常的Collection,因为这似乎是层次结构中最高的.

当我检查一个对象只Collection覆盖所有这三个类时,我会没事吗?

Thi*_*ilo 9

当我检查一个仅针对Collection的对象来覆盖所有这三个类时,我会没事吗?

是的,instanceof Collection对于Collection接口的所有实现(直接或间接)都将返回true.

在极少数情况下你不想要这个,你必须使用反射.例如,Class#getDeclaredClasses将为您提供由类直接扩展/实现的所有类和接口的列表.

一旦你知道某个东西是一个集合,你可以强制它来访问它的方法(比如iterator):

  if (myObject instanceof Collection){
      Collection<?> c = (Collection<?>) myObject;
      for (Object o: c){
         // do something with every element in the collection
      }
  }
Run Code Online (Sandbox Code Playgroud)