Я пытаюсь понять, как захваченное преобразование работает для подстановочных типов. В разделе JLS есть раздел:
Пусть
G
назовите объявление типового типа (§8.1.2, §9.1.2) с параметрами типаn
A1,...,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.