Я пытаюсь понять, как захваченное преобразование работает для подстановочных типов. В разделе JLS есть раздел:
Пусть
Gназовите объявление типового типа (§8.1.2, §9.1.2) с параметрами типаnA1,...,Anс соответствующими границамиU1,...,Un.Существует преобразование захвата из параметризованного типа
G<T1,...,Tn>(§4.5) к параметризованному типуG<S1,...,Sn>, где для1 ≤ i ≤ n:
Если
Tiявляется аргументом подстановочного типа (п. 4.5.1) формы?, тоSiявляется переменная нового типа, верхняя граница которойUi[A1:=S1,...,An:=Sn]и нижняя граница которой является типомnull(§ 4.1).Если
Tiявляется аргументом типа подстановки формы? extends Bi, тоSiявляется новая переменная типа, верхняя граница которойglb(Bi, Ui[A1:=S1,...,An:=Sn]), нижняя граница которой - типnull.
glb(V1,...,Vm)определяется какV1 & ... & Vm.Это ошибка времени компиляции, если для любых двух классов (не интерфейсов)
ViиVj,Viне является подклассомVjили наоборот.Если
Tiявляется аргументом типа подстановки формы? super Bi, тоSiявляется переменная нового типа, верхняя граница которойUi[A1:=S1,...,An:=Sn]и нижняя граница которойBi.В противном случае
Si = Ti.
То, что мне не понятно, это Ui[A1:=S1,...,An:=Sn]. Что это значит? Я не смог найти определение для этого поиска через JLS.