2015-09-03 6 views
1

Я читаю спецификацию Java для подтипирования и литья. Я знаю, что S <: T означает S - подтип T. Однако я не понимаю, что такое | S | <: | T | означает? К примеру, в этом контексте:Спецификации Java SE | S | symbol

Один аргумент типа является переменным типом или групповой символом, с верхней границей (от конверсии захвата, при необходимости) S; и другой тип аргумент T не является переменной типа или подстановочным знаком; и ни | S | <: | T | nor | T | <: | S |.

| T | является типом ссылки T? Это относится к классу T?

ответ

2

Обозначение «| T |» означает тип стирания типа «Т», в соответствии с определением стирания типа в JLS, Section 4.6.

Тип erasure - это отображение типов (возможно, включая параметризованные типы и переменные типа) для типов (которые никогда не являются параметризованными типами или переменными типа). Будем писать | T | для стирания типа T. Отображение стирания определяется следующим образом:

  • Стирание параметризованного типа (§4.5) G является | G |.

  • Стирание вложенного типа T.C является | T | .C.

  • Стирание типа массива T [] является | T | [].

  • Стирание переменной типа (§4.4) является стиранием его левого края.

  • Стирание любого другого типа - это сам тип.

Таким образом, "| S | <: | T |" означает, что стирание S является подтипом стирания T.