在Java语言规范版本11,第4.10.2节中,我如何读U???

Lai*_*son 7 java jls java-11

(我知道该领域的先前问题,但您会注意到原始发帖者问题的根源从未得到解决。我的问题和他们的问题一样,本质上是符号性的。)

\n

在 Java 语言规范第 11 版中(但有趣的是 JLS 17 中不再出现,可能是因为它很难理解),它在第 4.10.2 节中部分写道:

\n
\n

给定泛型类型声明 C<F\xe2\x82\x81,\xe2\x80\xa6,F\xe2\x82\x99> ( n > 0),参数化类型 C<T\xe2\x82 的直接超类型\x81,\xe2\x80\xa6,T\xe2\x82\x99>,其中 T\xe1\xb5\xa2 (1 \xe2\x89\xa4 i \ xe2\x89\xa4 n ) 是一种类型,都是以下的:

\n

D<U\xe2\x82\x81\xce\xb8,\xe2\x80\xa6,U\xe2\x82\x96\xce\xb8>,其中 D<U\xe2\x82\x81,\xe2\x80\ xa6,U\xe2\x82\x96> 是泛型类型,它是泛型类型 C<F\xe2\x82\x81,\xe2\x80\xa6,F\xe2\x82\x99> 的直接超类型和 \ xce\xb8 是替换 [F\xe2\x82\x81:=T\xe2\x82\x81,\xe2\x80\xa6,F\xe2\x82\x99:=T\xe2\x82\x99]。

\n
\n

以下是我所做的假设(可能是不正确的!):

\n
    \n
  • 由于1.3 节中的元表示法, \xce\xb8 松散地表示“用实际类型参数替换形式类型参数” 。
  • \n
  • C<F\xe2\x82\x81,\xe2\x80\xa6,F\xe2\x82\x99> 表示public interface Collection<E> extends Iterable<E>( n = 1),而 C<T\xe2\x82\x81,\xe2\x80 \xa6,T\xe2\x82\x99> 表示public class MyStringCollection implements Collection<String>(所以 T\xe2\x82\x99 = T\xe2\x82\x81)。这里, F\xe2\x82\x81 是 in ECollection<E>T\xe2\x82\x81 是String。\n
      \n
    • (我猜测作者选择 C ​​作为符号是因为他们正在谈论C类声明。)
    • \n
    \n
  • \n
  • D 是原始类型 C 的直接超类型,因此,Iterable. (我还猜测作者选择 D 作为符号,因为他们正在谈论从 C 派生的类型,因此“C 之后的下一个符号”是 D。)
  • \n
  • k是无界的,但我假设它应该是 1 \xe2\x89\xa4 k \xe2\x89\xa4 n,而它的边界未被提及的事实让我认为我的假设是正确的
  • \n
  • U\xe2\x82\x96 是 T\xe2\x82\x99 的替换-\xce\xb8(只是我可能不正确的假设!这是我的问题!),即将\xce\xb8 应用于 F 的结果\xe2\x82\x96,因此由于n为 1(Collection恰好采用n = 1 类型参数E),则k也为 1,因此我们将 \xce\xb8 应用于 F\xe2\x82\x81,根据定义\xce\xb8 产生 T\xe2\x82\x81,即String,因此 D<U\xe2\x82\x81> 是Iterable<String>。\n
      \n
    • (快速健全性检查:类型的引用是否可以Iterable<String>分配类型的引用Collection<String>?是的,可以。)
    • \n
    • (我还猜测作者选择 U 作为符号,因为他们正在谈论从 T 派生的类型,因此“T 之后的下一个符号”是 U。)
    • \n
    \n
  • \n
\n

我的主要问题:我关于如何读取符号结构“U\xe2\x82\x96\xce\xb8”的假设是否正确?“U\xe2\x82\x96 \xce\xb8”是否意味着“找到 F\xe2\x82\x96 并将 \xce\xb8 应用于它”? 如果是这样,我可以在哪个部分找到仅针对该假设的规范\xe2\x80\x94的理由\xe2\x80\x94?

\n

我的子问题:如果我的假设是正确的,我在哪里可以找到定义“U\xe2\x82\x96\xce\xb8”等符号的元符号,其中“”似乎意味着“应用替换函数跟在前面的事情第 k次出现之后,在第k在替换函数域的元素

\n

(这样的元表示法并未在规范本身中进行描述(其他元表示法,例如 \xce\xb8 ,非常明确,这是非常值得赞赏的),并且对传统元表示法的快速搜索并没有产生这样的约定.)

\n