След: Изучение Языка Java
Урок: (Обновленные) Обобщения
Универсальные Методы
Домашняя страница > Изучение Языка Java > (Обновленные) обобщения

Универсальные Методы

Универсальные методы являются методами, которые представляют их собственные параметры типа. Это подобно объявлению универсального типа, но контекст параметра типа ограничивается методом, где это объявляется. Статические и нестатические универсальные методы позволяются, так же как универсальные конструкторы class.

Синтаксис для универсального метода включает параметр типа, в угловых скобках, и появляется перед типом возврата метода. Для статических универсальных методов раздел параметра типа должен появиться перед типом возврата метода.

class Util включает универсальный метод, compare, который сравнивает два объекта Pair:

public class Util {
    // Generic static method
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return p1.getKey().equals(p2.getKey()) &&
               p1.getValue().equals(p2.getValue());
    }
}

public class Pair<K, V> {

    private K key;
    private V value;

    // Generic constructor
    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    // Generic methods
    public void setKey(K key) { this.key = key; }
    public void setValue(V value) { this.value = value; }
    public K getKey()   { return key; }
    public V getValue() { return value; }
}

Полный синтаксис для того, чтобы вызвать этот метод был бы:

Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same = Util.<Integer, String>compare(p1, p2);

Тип был явно обеспечен, как показано полужирным. Обычно, это может быть не учтено, и компилятор выведет тип, который необходим:

Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same = Util.compare(p1, p2);

Эта функция, известная как вывод типа, позволяет Вам вызывать универсальный метод как обычный метод, не определяя тип между угловыми скобками. Эта тема далее обсуждается в следующем разделе, Выводе типа.


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

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



Spec-Zone.ru - all specs in one place