Мотивация
У меня есть класс Either<L, R>
, который представляет значение одного из двух типов или семантически различных состояний. В некоторых случаях полезно работать с ним независимо от того, какое значение имеет альтернатива.
Задача
Я хочу (нестатический) метод, который принимает Consumer<T>
, где T
является супертипом L
и R
, где L
и R
являются параметрами типа для класса .
В настоящее время Java позволяет мне делать это: (статическая реализация)
public static <T, L extends T, R extends T> void collapse(Either<L,R> e, Consumer<T> op)
Но, конечно, в нестатической реализации я не могу наложить ограничения на L
и R
, потому что они уже определены для рассматриваемого экземпляра. Вместо этого мне нужно, чтобы эти ограничения были наложены на T
, но java не позволит мне написать следующее, потому что он допускает только один класс в ограничении супертипа или подтипа одновременно. Это особенно расстраивает, учитывая, что все классы имеют как минимум Object
в качестве общего супертипа, поэтому эти ограничения всегда выполняются.
public void collapse(Consumer<? super L & R> op)
Есть ли другой способ определения этого ограничения, любой намек на то, что он разрешен в более поздней версии java, или какое-либо объяснение того, почему это будет нарушающая функция?