abstract class ComparisonChain {
private ComparisonChain() {
}
/**
* Begins a new chained comparison statement. See example in the class
* documentation.
*/
public static ComparisonChain start() {
return ACTIVE;
}
private static final ComparisonChain ACTIVE = new ComparisonChain() {
@SuppressWarnings("unchecked")
@Override
public ComparisonChain compare(Comparable left, Comparable right) {
return classify(left.compareTo(right));
}
@Override
public <T> ComparisonChain compare(T left, T right, Comparator<T> comparator) {
return classify(comparator.compare(left, right));
}
ComparisonChain classify(int result) {
return (result < 0) ? LESS : (result > 0) ? GREATER : ACTIVE;
}
@Override
public int result() {
return 0;
}
};
private static final ComparisonChain LESS = new InactiveComparisonChain(-1);
private static final ComparisonChain GREATER = new InactiveComparisonChain(1);
private static final class InactiveComparisonChain extends ComparisonChain {
final int result;
InactiveComparisonChain(int result) {
this.result = result;
}
@Override
public ComparisonChain compare(Comparable left, Comparable right) {
return this;
}
@Override
public <T> ComparisonChain compare(T left, T right, Comparator<T> comparator) {
return this;
}
@Override
public int result() {
return result;
}
}
public abstract ComparisonChain compare(Comparable<?> left, Comparable<?> right);
public abstract <T> ComparisonChain compare(T left, T right, Comparator<T> comparator);
public abstract int result();
}
记录下Guava的ComparisonChain源码
最新推荐文章于 2024-03-18 15:17:00 发布