Рассмотрим следующий макет Java Generics, в котором я ожидаю, что ItemList будет иметь интерфейс, совместимый со списком:
public interface ItemList<T extends Item> extends List<T> {}
public interface Item {}
public interface List<T> {}
public static class Test<T extends Item> {
public void foo(ItemList<T> fizz) {
// T extends B
// fizz is A<T extends B> extends C<T extends B>
// therefore, is fizz not always compatible with C<B>?
// bar(fizz); error?
bar((List<Item>) fizz); // allowed, but unchecked cast warning?
}
private void bar(List<Item> buzz) {}
}
Т.е. Почему я не могу передать fizz
методу bar
и почему меня предупреждают о неконтролируемом составе? Гарантированно ли это безопасное приведение, или предупреждение - законная проблема?