package java.util; import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.dataflow.qual.Pure; import java.util.Comparator; import java.util.function.Function; // Javadoc says: "a comparator may optionally permit comparison of null // arguments, while maintaining the requirements for an equivalence relation." public interface Comparator<T extends @Nullable Object> { public abstract int compare(T a1, T a2); @Pure public abstract boolean equals(@Nullable Object a1); public static <T extends Comparable<@NonNull ? super @NonNull T>> Comparator<T> naturalOrder(){ throw new RuntimeException("skeleton method"); } public static <T> Comparator<@Nullable T> nullsFirst(Comparator<@Nullable ? super T> comparator) { throw new RuntimeException("skeleton method"); } public static <T> Comparator<@Nullable T> nullsLast(Comparator<@Nullable ? super T> comparator) { throw new RuntimeException("skeleton method"); } public static <T, U extends Comparable<? super U>> Comparator<T> comparing( Function<? super T, ? extends U> keyExtractor) { throw new RuntimeException("skeleton method"); } }