|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Универсальные методы являются методами, которые представляют их собственные параметры типа. Это подобно объявлению универсального типа, но контекст параметра типа ограничивается методом, где это объявляется. Статические и нестатические универсальные методы позволяются, так же как универсальные конструкторы 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);
Эта функция, известная как вывод типа, позволяет Вам вызывать универсальный метод как обычный метод, не определяя тип между угловыми скобками. Эта тема далее обсуждается в следующем разделе, Выводе типа.