静的メソッドのコンテキストでは、型参照を絞り込み、次のようなオブジェクトのより具体的なメソッドを呼び出したいと思います:
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の消去は
L extends List<? extends T> & Comparable
は
List<? extends T>
では、なぜこの方法でメソッドを呼び出せないのでしょうか?
do((List<? extends T>) iterable); // Which results in invoking do(Iterable<? extends T)