JLS的部分描述了ST(U)是什么,其中U是一种类型:
设ST( Ui )是Ui的一组超级类型。
在同一节的这几行中,有一个例子:
例如,给定的List和List,只要将集合ST( List ) ={List、Collection、Object }和ST(List) ={List、Collection、Object }相交,就会产生一个集合{ Object },并且我们会忘记一个事实,即上限可以安全地假定为一个列表。
ST(列表)不应该包括Iterable吗?
发布于 2017-08-06 20:07:23
你说得对,ST(List<String>)应该包含Iterable<String>。而且,ST(List<String>)应该包含List和List的所有超级类型,因为JLS 8第4.10.2节,
给定泛型类型声明
C<F1,...,Fn>(n > 0),参数化类型C<T1,...,Tn>的直接超类型(其中Ti (1≤I≤n)是一种类型)全部如下:
因此,这个例子并没有实际演示它试图演示的内容,因为在ESTs进入图片之前,List实际上处于ST(List<String>)和ST(List<Object>)的交集中。
我认为该示例可能是为超级类型规则的早期版本编写的,但在规则更改时没有更新。Java7JLS 以不同的方式定义超类型关系,但即便如此,我也认为Iterable<String>是List<String>的超级类型。
https://stackoverflow.com/questions/45535893
复制相似问题