W kontekście statycznych metod ja tutaj wąski jako referencję typu i wywoływać bardziej szczegółowy sposób przedmiotu, jak to:sposób Wywołanie których parametr ten jest ograniczony przez rodzaj przecięcia
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
}
więc chciałbym wiedzieć, czy istnieje składnia umożliwiając zadzwonić zrobić (iterable) raczej korzystania z niektórych siekać jak ten:
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
UWAGA: wiem, że to nie jest możliwe, aby rzucić mój iterable ten sposób
do((List<? extends T> & RandomAccess) iterable);
i szwy mi się, że wymazać z L w
L extends List<? extends T> & Comparable
jest
List<? extends T>
Więc dlaczego nie mogę wywołać metodę w ten sposób?
do((List<? extends T>) iterable); // Which results in invoking do(Iterable<? extends T)
kluczowym słowem 'do' jest dla pętli –
Oczywiście ... To był tylko przykład ... –
Wydaje się' & RandomAccess> 'może być uproszczone do' i RandomAccess> 'lub' & RandomAccess> ', przynajmniej dla tych sygnatur. –