Determining the extended interfaces of a Class

前端 未结 5 799
太阳男子
太阳男子 2020-12-20 13:48

I need to determine if a Class object representing an interface extends another interface, ie:

 package a.b.c.d;
    public Interface IMyInterface extends a.         


        
5条回答
  •  情歌与酒
    2020-12-20 14:32

    Use Class.getInterfaces such as:

    Class c; // Your class
    for(Class i : c.getInterfaces()) {
         // test if i is your interface
    }
    

    Also the following code might be of help, it will give you a set with all super-classes and interfaces of a certain class:

    public static Set> getInheritance(Class in)
    {
        LinkedHashSet> result = new LinkedHashSet>();
    
        result.add(in);
        getInheritance(in, result);
    
        return result;
    }
    
    /**
     * Get inheritance of type.
     * 
     * @param in
     * @param result
     */
    private static void getInheritance(Class in, Set> result)
    {
        Class superclass = getSuperclass(in);
    
        if(superclass != null)
        {
            result.add(superclass);
            getInheritance(superclass, result);
        }
    
        getInterfaceInheritance(in, result);
    }
    
    /**
     * Get interfaces that the type inherits from.
     * 
     * @param in
     * @param result
     */
    private static void getInterfaceInheritance(Class in, Set> result)
    {
        for(Class c : in.getInterfaces())
        {
            result.add(c);
    
            getInterfaceInheritance(c, result);
        }
    }
    
    /**
     * Get superclass of class.
     * 
     * @param in
     * @return
     */
    private static Class getSuperclass(Class in)
    {
        if(in == null)
        {
            return null;
        }
    
        if(in.isArray() && in != Object[].class)
        {
            Class type = in.getComponentType();
    
            while(type.isArray())
            {
                type = type.getComponentType();
            }
    
            return type;
        }
    
        return in.getSuperclass();
    }
    

    Edit: Added some code to get all super-classes and interfaces of a certain class.

提交回复
热议问题