在静态方法的上下文中,我想缩小类型引用并为这样的对象调用更具体的方法:
public static <T, L extends List<? extends T> & RandomAccess> void do(L list) {
// Do some stuff
}
public static <T> void do(Iterable<? extends T> iterable) {
if(iterable instanceof List && iterable instanceof RandomAccess)
// invoke do(List&RandomAccess) method
else
// do something else
}
所以我想知道是否有一种语法允许调用do(Iterable)而不是使用像这样的一些技巧:
private static <L extends List<? extends T> & Comparable> L cast(Iterable<? extends T> iterable) {
return (L) iterable;
}
public static <T> void do(Iterable<? extends T> iterable) {
if(iterable instanceof List && iterable instanceof RandomAccess)
do(cast(iterable));
else
// do something else
注意:
我知道不可能以这种方式转换我的可迭代对象
do((List<? extends T> & RandomAccess) iterable);
在我看来,删除L in
L extends List<? extends T> & Comparable
是
List<? extends T>
那么为什么我不能以这种方式调用该方法呢?
do((List<? extends T>) iterable); // Which results in invoking do(Iterable<? extends T)