Java class comparator?

I want to compare two Java classes

class ClassComparator implements Comparator<Class> {
    @Override
    public int compare(Class arg0,Class arg1) {
        return ....;
    }
}

I can only compare class names, but I want the parent analogy to be "smaller" than the class derived from them And I hope this less - than - normal relationship can be passed and applied to any two classes (to be honest, in my real problem, one class is always a superclass of another class, but I want some general case code, because theoretically this can be changed.)

Maybe this is done. Can anyone share code snippets?

What I think is: if no class derives from another class, find the two superclasses they derive from a common ancestor and compare their names (well, if any object is larger than any interface, it can even support interfaces.)

Solution

You can also compare classes that are not in a hierarchy with their depth and classes that are far away from the object class

class ClassComparator implements Comparator<Class> {
    @Override
    public int compare(Class arg0,Class arg1) {
        boolean arg0assignable = arg0.isAssignableFrom(arg1);
        boolean arg1assignable = arg1.isAssignableFrom(arg0);
        if (arg0assignable == arg1assignable && arg0assignable) {
            return 0;
        } else if (arg0assignable) {
            return -1;
        } else if (arg1assignable){
            return 1;
        } else {
            return compareByDistanceToObject(arg0,arg1);
        }
    }

    private int compareByDistanceToObject(Class arg0,Class arg1) {
        int distanceToObject0 = getDistance(arg0);
        int distanceToObject1 = getDistance(arg1);
        if (distanceToObject0 == distanceToObject1) {
            return 0;
        } else if (distanceToObject0 < distanceToObject1) {
            return -1;
        } else {
            return 1;
        }
    }

    private int getDistance(Class clazz) {
        if (clazz == Object.class) {
            return 0;
        }
        return 1 + getDistance(clazz.getSuperclass());
    }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>