Java中的嵌套泛型通配符相关疑问
Java中的嵌套泛型通配符相关疑问
嘿,最近我写Java代码的时候碰到了个泛型相关的小困惑,我定义了一个带泛型参数的接口,里面的方法还用到了基于接口泛型的上界限制,代码是这样的:
interface X<T> { <S extends T> void foo(Iterable<S> t); }
这里的<S extends T>是给方法foo的泛型参数S加了个上界限制,意思就是这个方法可以接收任何T的子类作为Iterable的类型参数。举个实际例子你就懂了:
X<CharSequence> x = ...; List<String> stringList = ...; // 因为String是CharSequence的子类,完全符合S extends T的要求,所以能直接传给foo x.foo(stringList);
不过我现在有点懵的是,如果把方法改成void foo(Iterable<? extends T> t),和原来用方法泛型<S extends T>的写法,在使用场景和限制上到底有啥不一样?而且涉及到这种嵌套的泛型(Iterable里面套着泛型),通配符的使用总是让我绕不清,有没有大佬能帮我捋明白呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

