Почему я не могу преобразовать ограниченные Java универсальные шаблоны в суперкласс с похожими типами? - PullRequest
0 голосов
/ 07 мая 2020

Рассмотрим следующий макет 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 и почему меня предупреждают о неконтролируемом составе? Гарантированно ли это безопасное приведение, или предупреждение - законная проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...