Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.tapestry5.ioc.internal.util
Class InheritanceSearch

    java.lang.Object
      org.apache.tapestry5.ioc.internal.util.InheritanceSearch

All Implemented Interfaces:
  java.lang.Iterable<java.lang.Class>, java.util.Iterator<java.lang.Class>

    public class InheritanceSearch

extends java.lang.Object
implements java.util.Iterator<java.lang.Class>, java.lang.Iterable<java.lang.Class>

Used to search from a particular class up the inheritance hierarchy of extended classes and implemented interfaces.

The search starts with the initial class (provided in the constructor). It progresses up the inheritance chain, but skips java.lang.Object.

Once classes are exhausted, the inheritance hiearchy is searched. This is a breadth-first search, rooted in the interfaces implemented by the initial class at its super classes.

Once all interfaces are exhausted, java.lang.Object is returned (it is always returned last).

Two minor tweak to normal inheritance rules:

- Normally, the parent class of an object array is java.lang.Object, which is odd because Foo[] is assignable to Object[]. Thus, we tweak the search so that the effective super class of Foo[] is Object[].
- The "super class" of a primtive type is its wrapper type, with the exception of void, whose "super class" is left at its normal value (Object.class)

This class implements the `Iterable` interface, so it can be used directly in a for loop: `for (Class search : new InheritanceSearch(startClass)) { ... }`

This class is not threadsafe.

Constructor Summary
`InheritanceSearch(java.lang.Class searchClass)`

Method Summary
`boolean` | `hasNext()`
`java.util.Iterator<java.lang.Class>` | `iterator()`
`java.lang.Class` | `next()`
`void` | `remove()`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### InheritanceSearch

    public InheritanceSearch(java.lang.Class searchClass)

Method Detail

### iterator

    public java.util.Iterator<java.lang.Class> iterator()

  Specified by:
    `iterator` in interface `java.lang.Iterable<java.lang.Class>`

### hasNext

    public boolean hasNext()

  Specified by:
    `hasNext` in interface `java.util.Iterator<java.lang.Class>`

### next

    public java.lang.Class next()

  Specified by:
    `next` in interface `java.util.Iterator<java.lang.Class>`

### remove

    public void remove()

  Specified by:
    `remove` in interface `java.util.Iterator<java.lang.Class>`
  Throws:
    `java.lang.UnsupportedOperationException` - always

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2003-2012 The Apache Software Foundation.