Вы можете сделать несколько причудливых дженериков. Допустим, основным интерфейсом является Lickable
(который определяет метод lick()
), и вам нужен метод, который будет обрабатывать объекты, Lickable
и Comparable
. Вы пишете:
public <LickableAndComparable extends Lickable & Comparable<LickableAndComparable>> void lickGreater(LickableAndComparable a, LickableAndComparable b) {
if (a.compareTo(b) > 0) a.lick();
else b.lick();
}
Затем вы можете вызывать это для объектов любого типа, которые Lickable
и Comparable
. Обратите внимание, что это работает только в том случае, если оба аргумента имеют тип, который является одновременно Lickable
и Comparable
. Если вы имеете в виду только один класс, то это должно быть хорошо. Вы можете столкнуться с ошибками компилятора, вызывающими мигрень, если использование этого метода усложняется.