Предположим, вы пишете статическую функцию в Java для сортировки массива, подобно Arrays.sort(). Проблема с Arrays.sort() заключается в том, что он получает массив объекта и выбрасывает ClassCastException, если его элементы не реализуют Comparable.
Итак, вы хотите, чтобы ваша функция получала в качестве аргумента массив подтипа Comparable. Что-то вроде этого может работать:
static <T extends Comparable> void sort(T[] array);
Проблема с этой сигнатурой заключается в том, что вы все равно можете передать массив Comparables с целыми и строками, что приведет к RuntimeException.
Итак, как вы можете создать функцию, которая получит только массив, элементы которого реализуют Comparable и имеют одинаковый тип (например, Integer, String и т.д.?)