Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: (Обновленные) Обобщения
Вопросы и Упражнения
Домашняя страница > Изучение Языка Java > (Обновленные) обобщения

Вопросы и Упражнения: Обобщения

  1. Запишите универсальный метод, чтобы считать число элементов в наборе, у которых есть определенное свойство (например, нечетные целые числа, простые числа, палиндромы).

  2. Следующий class скомпилирует? В противном случае, почему?
    public final class Algorithm {
        public static T max(T x, T y) {
            return x > y ? x : y;
        }
    }
    
  3. Запишите универсальный метод, чтобы обмениваться позициями двух различных элементов в массиве.

  4. Если компилятор стирает все параметры типа во время компиляции, почему следует использовать обобщения?

  5. Во что преобразовывается следующий class после стирания типа?
    public class Pair<K, V> {
    
        public Pair(K key, V value) {
            this.key = key;
            this.value = value;
        }
    
        public K getKey(); { return key; }
        public V getValue(); { return value; }
    
        public void setKey(K key)     { this.key = key; }
        public void setValue(V value) { this.value = value; }
    
        private K key;
        private V value;
    }
    
  6. Во что преобразовывается следующий метод после стирания типа?
    public static <T extends Comparable<T>>
        int findFirstGreaterThan(T[] at, T elem) {
        // ...
    }
    
  7. Следующий метод скомпилирует? В противном случае, почему?
    public static void print(List<? super Number> list) {
        for (Number n : list)
            System.out.print(n + " ");
        System.out.println();
    }
    
  8. Запишите универсальный метод, чтобы счесть максимальный элемент в диапазоне [begin, end) списка.

  9. Следующий class скомпилирует? В противном случае, почему?
    public class Singleton<T> {
    
        public static T getInstance() {
            if (instance == null)
                instance = new Singleton<T>();
    
            return instance;
        }
    
        private static T instance = null;
    }
    
  10. Учитывая следующие классы:
    class Shape { /* ... */ }
    class Circle extends Shape { /* ... */ }
    class Rectangle extends Shape { /* ... */ }
    
    class Node<T> { /* ... */ }
    
    Следующее кодирует компиляцию? В противном случае, почему?
    Node<Circle> nc = new Node<>();
    Node<Shape>  ns = nc;
    
  11. Рассмотрите этот class:
    class Node<T> implements Comparable<T> {
        public int compareTo(T obj) { /* ... */ }
        // ...
    }
    
    Следующее кодирует компиляцию? В противном случае, почему?
    Node<String> node = new Node<>();
    Comparable<String> comp = node;
    
  12. Как Вы вызываете следующий метод, чтобы найти первое целое число в списке, который является относительно главным к списку указанных целых чисел?
    public static <T>
        int findFirst(List<T> list, int begin, int end, UnaryPredicate<T> p)
    
    Отметьте, что два целых числа a и b являются относительно главными, если НОД (a, b) = 1, где НОД короток для наибольшего общего делителя.
Проверьте свои ответы.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Ограничения на Обобщения
Следующая страница: Пакеты