Here you can find the source of distanceToClass(Class> theClass, Class> theAncestor)
Parameter | Description |
---|---|
theClass | the class to check. |
theAncestor | the ancestor class. |
0
if the two parameters are equals, to 1
if the class directly extends the ancestor and is incremented by 1
for each ancestor between the class and its ancestor.
public static int distanceToClass(Class<?> theClass, Class<?> theAncestor)
//package com.java2s; //License from project: LGPL public class Main { /**//from w w w .j a v a 2 s.c o m * Compute the hierarchical distance between the given class and an ancestor class. * The hierarchical distance is equals to <code>0</code> if the two parameters are equals, * to <code>1</code> if the class directly extends the ancestor * and is incremented by <code>1</code> for each ancestor between the class and its ancestor.<br> * If the given class is not a sub class of the ancestor, the result is <code>-1</code>. * @param theClass the class to check. * @param theAncestor the ancestor class. * @return <code>0</code> if the two parameters are equals, * to <code>1</code> if the class directly extends the ancestor * and is incremented by <code>1</code> for each ancestor between the class and its ancestor. * @see #isSubClass(Class, Class) */ public static int distanceToClass(Class<?> theClass, Class<?> theAncestor) { Class<?> superClass = null; if ((theClass != null) && (theAncestor != null) && (!theAncestor.isInterface())) { // If the ancestor and the current class are equals, the distance is 0 if (theAncestor.equals(theClass)) { return 0; } // Search if the ancestor is directly declared on the class itself as super class. In this case, // the method return true. If the ancestor is not declared within the given class, // its class hierarchy is recursively processed. superClass = theClass.getSuperclass(); if (superClass != null) { if (superClass.equals(theAncestor)) { return 1; } else { // the ancestor was not the direct super class, // the search is done following the class hierarchy int tmp = distanceToClass(theClass.getSuperclass(), theAncestor); if (tmp > -1) { return 1 + tmp; } } } superClass = null; } return -1; } }