Check if a Class Object is subclass of another Class Object in Java

前端 未结 8 1032
鱼传尺愫
鱼传尺愫 2020-11-28 20:33

I\'m playing around with Java\'s reflection API and trying to handle some fields. Now I\'m stuck with identifying the type of my fields. Strings are easy, just do myFi

相关标签:
8条回答
  • 2020-11-28 21:13

    This is an improved version of @schuttek's answer. It is improved because it correctly return false for primitives (e.g. isSubclassOf(int.class, Object.class) => false) and also correctly handles interfaces (e.g. isSubclassOf(HashMap.class, Map.class) => true).

    static public boolean isSubclassOf(final Class<?> clazz, final Class<?> possibleSuperClass)
    {
        if (clazz == null || possibleSuperClass == null)
        {
            return false;
        }
        else if (clazz.equals(possibleSuperClass))
        {
            return true;
        }
        else
        {
            final boolean isSubclass = isSubclassOf(clazz.getSuperclass(), possibleSuperClass);
    
            if (!isSubclass && clazz.getInterfaces() != null)
            {
                for (final Class<?> inter : clazz.getInterfaces())
                {
                    if (isSubclassOf(inter, possibleSuperClass))
                    {
                        return true;
                    }
                }
            }
    
            return isSubclass;
        }
    }
    
    0 讨论(0)
  • 2020-11-28 21:17

    This works for me:

    protected boolean isTypeOf(String myClass, Class<?> superClass) {
        boolean isSubclassOf = false;
        try {
            Class<?> clazz = Class.forName(myClass);
            if (!clazz.equals(superClass)) {
                clazz = clazz.getSuperclass();
                isSubclassOf = isTypeOf(clazz.getName(), superClass);
            } else {
                isSubclassOf = true;
            }
    
        } catch(ClassNotFoundException e) {
            /* Ignore */
        }
        return isSubclassOf;
    }
    
    0 讨论(0)
提交回复
热议问题