2015-06-27 34 views
2

阅读Angelika Langer's superb Generics FAQ,我终于开始真正理解泛型的一些更微妙的点。术语“最左边”和“最右边”(指泛型)是如何得到其含义的?

但是我仍然对某些术语感兴趣。的“最左边”和“最右边”我的外行的理解是从兰格如何使用它her FAQ appararently不同。

那段翻译类型擦除执行,这意味着 类型参数由它们最左边结合的取代或者没有结合 被指定的对象..

.. 。

类型擦除最左边的上限用于类型擦除,而 替换字节码中的类型参数。在我们的类Box {...}中,所有出现的T将被 上限数字替换。例如,如果Box类具有类型T的私有字段 和用于设置该私有字段的方法void set(T content),则该字段在类型擦除之后将是类型Number,并且该方法将被转换为方法空隙组(编号的内容)...

...

类型参数的类型擦除是其最左边的结合 ...

鉴于Box< T extends Number >;我的理解是,T是类型参数,Number是绑定。然后,因为Number是类型参数T,为什么不Number称为“最右边势必”?这仅仅是一个深奥的Mathemetician说话吗?它是否像正式类型理论,六个意味着九个,左边意味着正确?

有人可以教我为什么在右边被视觉印刷的东西被称为“最左边”类型理论?

在此先感谢。

+0

这个称号不是英语什么特别的原因? –

回答

0

啊!我怀疑这是因为可能有多个边界。 Like this

“...用于指定类型参数边界的语法是:

<TypeParameter extends Class & Interface 1 & ... & Interface N > 

边界列表由一个类和/或几个接口组成。

实施例(具有若干边界类型参数):

class Pair<A extends Comparable<A> & Cloneable , 
      B extends Comparable<B> & Cloneable > 
    implements Comparable<Pair<A,B>>, Cloneable { ... } 

这是一个有两个类型的参数A和B的通用类,二者的 具有两个边界。 ......”

我可以看到会有一个最左边一个最右边必将在这种情况下,

+0

你可能是对的,因为4.4的JLS包含这个短语:“绑定中的类型顺序仅仅是重要的,因为类型变量的删除是由其绑定中的第一个类型确定的,并且类类型或类型变量只能出现在第一个位置。“”最左边“意味着”第一个“,它不是重要的nt哪种类型最后出现,并且Langer在您链接的页面中不使用“最右边”。 – ajb

相关问题