Determines the distance of the given object to the given class in the inheritance tree. - Java Reflection

Java examples for Reflection:Class

Description

Determines the distance of the given object to the given class in the inheritance tree.

Demo Code

/*/*from  ww  w. j av  a 2  s .c om*/
 * Copyright 2013 Balazs Berkes.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import static java.lang.reflect.Modifier.isFinal;
import static java.lang.reflect.Modifier.isPublic;
import static java.lang.reflect.Modifier.isStatic;
import static org.mockannotations.utils.MockAnnotationValidationUtils.notNull;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main{
    public static void main(String[] argv) throws Exception{
        Object object = "java2s.com";
        Class clazz = String.class;
        System.out.println(getInheritanceDistance(object,clazz));
    }
    /**
     * Determines the distance of the given object to the given class in the
     * inheritance tree.
     * <p>
     * @param object the root object
     * @param clazz the class to determine the distance to
     * @return the distance of the object to the class. If the object is not an
     * instance of the class {@code -1} will return.
     */
    public static int getInheritanceDistance(Object object, Class<?> clazz) {
        if (clazz.isInstance(object)) {
            return calculateDistance(object.getClass(), clazz);
        } else {
            return -1;
        }
    }
    private static int calculateDistance(Class<?> compared, Class<?> clazz) {
        int distance = 0;
        while (compared != clazz) {
            compared = compared.getSuperclass();
            distance++;
            if (compared == Object.class) {
                break;
            }
        }
        return distance;
    }
}

Related Tutorials