
org.squirrelframework.foundation.util.ClassComparator Maven / Gradle / Ivy
package org.squirrelframework.foundation.util;
import java.io.Serializable;
import java.util.Comparator;
/**
* Orders classes by assignability, with closest types ordered first.
*
* @author Henry.He
*
* @param type of object to compare
*/
public class ClassComparator implements Comparator, Serializable {
private static final long serialVersionUID = 7351750287378530968L;
@Override
public int compare(T o1, T o2) {
Class> c1 = o1.getClass();
Class> c2 = o2.getClass();
if (c1.equals(c2)) {
return 0;
}
if (c1.isAssignableFrom(c2)) {
return -1;
} else {
if (!c2.isAssignableFrom(c2)) {
throw new IllegalArgumentException("The classes share no relation");
}
return 1;
}
}
public boolean isComparable(final Class> c1, final Class> c2) {
return (c1.isAssignableFrom(c2) || c2.isAssignableFrom(c1));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy