JSL中的符号S [F1:= T1,...,Fn:= Tn]

时间:2015-11-04 23:27:43

标签: java jsl

在JLS(参数化类型)的4.5节中提到了以下符号: S[F1:=T1,...,Fn:=Tn]

我并不完全不理解这种符号的含义。

以下段落中提到:

  

泛型类型具有类型参数F1,...,Fn以及相应的边界   B1,...,BN。参数化类型的每个类型参数Ti的范围都超过   所有类型都是相应列出的所有类型的子类型   界。也就是说,对于Bi中的每个束缚类型S,Ti是其子类型   S [F1:= T1,...,Fn:= Tn](§4.10)。

上述陈述的含义很清楚。

但我不清楚为什么[F1:=T1,...,Fn:=Tn]

之后我们S。{

2 个答案:

答案 0 :(得分:0)

这是我的想法。

符号[F1:=T1,...,Fn:=Tn]是使用concete类型(或通配符)Fi替换每个类型参数Ti, i=1,2,...n

通用类可以被视为具有(n+1)参数f(F1,F2,...,Fn, S)的函数,其中Fi - 是类型参数,S属于以下有限集{{1 }}。 如果我们用{B1,B2,...,Bn}替换,我们得到一个参数的函数: [F1:=T1,...,Fn:=Tn]

考虑g(s)=f(T1,T2,...,Tn,S)是用[F1:=T1,...,Fn:=Tn]代替Fi 我们可以引入新的符号: Ti, i=1,2,...,n

功能f(T1,T2,...,Tn,S)=h(S)[F1=T1,...,Fn=Tn]应该是线性的:h(S)

最后我们有: h(S)=S

因此,f(T1,T2,...,Tn,S)=S[F1=T1,...,Fn=Tn]概念意味着:以固定值S[F1=T1,...,Fn=Tn]获取上限Bi之一。

答案 1 :(得分:0)

我看起来不对劲。

首先:没有括号部分,句子是对前一个语句的正确重述,并且都符合我对java语言的理解。

第二:符号错了。 §4.10引用了子类型和超类型符号&lt ;:和:>,但实际使用的是替换符号:=(实际上未在版本8中定义为替换符号,但在版本7中,并在其他部分中用作替换符号)该文件)。

最后:JSL的早期版本具有更为荒谬的相同表示法版本。

  

4.5. Parameterized Types

     

具有一个的泛型类或接口声明C(第8.1.2节,第9.1.2节)   或更多类型参数A1,...,An具有相应的边界   B1,...,Bn定义了一组参数化类型,每种类型对应一种类型   调用类型参数部分。

     

集合中的每个参数化类型都是C形式   每个类型参数Ti的范围都是所有类型的子类型   在相应的边界中列出的类型。也就是说,对于每个绑定类型   Bi中的Si,Ti是Si的一个子类型[F1:= T1,...,Fn:= Tn]。

它有相同的括号,但这次甚至没有提到在括号中使用之前的F。

当在版本6和版本7之间重写此部分时,看起来括号被错误地复制。版本6具有括号,但简单的意思是对每个类型参数进行边界检查。