Домашняя страница > Изучение Языка Java > (Обновленные) обобщения
Вопросы и Упражнения: Обобщения
- Запишите универсальный метод, чтобы считать число элементов в наборе, у которых есть определенное свойство (например, нечетные целые числа, простые числа, палиндромы).
- Следующий class скомпилирует? В противном случае, почему?
public final class Algorithm {
public static T max(T x, T y) {
return x > y ? x : y;
}
}
- Запишите универсальный метод, чтобы обмениваться позициями двух различных элементов в массиве.
- Если компилятор стирает все параметры типа во время компиляции, почему следует использовать обобщения?
- Во что преобразовывается следующий 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;
}
- Во что преобразовывается следующий метод после стирания типа?
public static <T extends Comparable<T>>
int findFirstGreaterThan(T[] at, T elem) {
// ...
}
- Следующий метод скомпилирует? В противном случае, почему?
public static void print(List<? super Number> list) {
for (Number n : list)
System.out.print(n + " ");
System.out.println();
}
- Запишите универсальный метод, чтобы счесть максимальный элемент в диапазоне [begin, end) списка.
- Следующий class скомпилирует? В противном случае, почему?
public class Singleton<T> {
public static T getInstance() {
if (instance == null)
instance = new Singleton<T>();
return instance;
}
private static T instance = null;
}
- Учитывая следующие классы:
class Shape { /* ... */ }
class Circle extends Shape { /* ... */ }
class Rectangle extends Shape { /* ... */ }
class Node<T> { /* ... */ }
Следующее кодирует компиляцию? В противном случае, почему?
Node<Circle> nc = new Node<>();
Node<Shape> ns = nc;
- Рассмотрите этот class:
class Node<T> implements Comparable<T> {
public int compareTo(T obj) { /* ... */ }
// ...
}
Следующее кодирует компиляцию? В противном случае, почему?
Node<String> node = new Node<>();
Comparable<String> comp = node;
- Как Вы вызываете следующий метод, чтобы найти первое целое число в списке, который является относительно главным к списку указанных целых чисел?
public static <T>
int findFirst(List<T> list, int begin, int end, UnaryPredicate<T> p)
Отметьте, что два целых числа a и b являются относительно главными, если НОД (a, b) = 1, где НОД короток для наибольшего общего делителя.
Проверьте свои ответы.