Какие из этих выражений компилируются? 
 HashSet<Number> hs = new HashSet‹Integer>(); 
 HashSet<? super ClassCastException› set = new HashSet<Exception>(); 
 List<object> values - new HashSet<object›(); 
 List‹? extends Object> objects = new ArrayList<object>();
Другие предметы Университет Обобщения (Generics) программирование на Java компиляция выражений HashSet List классы Java generics в Java ошибки компиляции Java университетское программирование изучение Java основы Java
Чтобы определить, какие из приведенных выражений компилируются, давайте рассмотрим каждое из них по отдельности.
В этом выражении мы создаем переменную hs типа HashSet<Number> и пытаемся инициализировать ее экземпляром HashSet<Integer>. Это не скомпилируется, потому что HashSet<Integer> не является подтипом HashSet<Number>. В Java обобщения (generics) не поддерживают ковариантность, поэтому это выражение не компилируется.
В этом выражении мы создаем переменную set типа HashSet<? super ClassCastException> и инициализируем ее экземпляром HashSet<Exception>. Это выражение также не скомпилируется, поскольку Exception не является суперклассом ClassCastException, и, следовательно, не соответствует ограничению, указанному в обобщении.
Здесь мы пытаемся создать переменную values типа List<object> и инициализировать ее экземпляром HashSet<object>. Однако в Java тип object должен быть с заглавной буквы, т.е. Object. Из-за этого выражение не компилируется.
В этом выражении мы создаем переменную objects типа List<? extends Object> и инициализируем ее экземпляром ArrayList<object>. Как и в предыдущем случае, object должно быть с заглавной буквы, т.е. Object. Поэтому это выражение также не компилируется.
Таким образом, все четыре выражения не компилируются. Основные причины - это неправильное использование типов и обобщений, а также неверное написание типов (например, object вместо Object).