Контракт сравнимый и компаратор по нулю

Comparable в договоре указано, чтоe.compareTo(null) должен броситьNullPointerException.

ОтAPI:

Обратите внимание, чтоnull не является экземпляром какого-либо класса, иe.compareTo(null) должен броситьNullPointerException даже еслиe.equals(null) возвращаетсяfalse.

С другой стороны,Comparator API ничего не упоминает о том, что должно происходить при сравненииnull, Рассмотрим следующую попытку универсального метода, который принимаетComparableи вернутьComparator за это ставитnull как минимальный элемент.

static <T extends Comparable<? super T>> Comparator<T> nullComparableComparator() {
   return new Comparator<T>() {
      @Override public int compare(T el1, T el2) {
         return
            el1 == null ? -1 :
            el2 == null ? +1 :
            el1.compareTo(el2);
      }
   };
}

Это позволяет нам делать следующее:

List<Integer> numbers = new ArrayList<Integer>(
   Arrays.asList(3, 2, 1, null, null, 0)
);
Comparator<Integer> numbersComp = nullComparableComparator();
Collections.sort(numbers, numbersComp);
System.out.println(numbers);
// "[null, null, 0, 1, 2, 3]"

List<String> names = new ArrayList<String>(
   Arrays.asList("Bob", null, "Alice", "Carol")
);
Comparator<String> namesComp = nullComparableComparator();
Collections.sort(names, namesComp);
System.out.println(names);
// "[null, Alice, Bob, Carol]"

Итак, вопросы:

Является ли это приемлемым использованиемComparatorили это нарушает неписанное правило относительно сравненияnull и бросатьNullPointerException?Это когда-нибудь хорошая идея, чтобы даже сортироватьList содержащийnull элементы, или это верный признак ошибки проектирования?

Ответы на вопрос(3)

Ваш ответ на вопрос