2014-11-06 3 views
3

Пожалуйста, ознакомьтесь с приведенным ниже кодом. Здесь, в приведенном ниже методе, каково именно использование этих параметров <K,V> перед возвратом метода метода?Что такое общий тип возврата

<K, V> boolean 

Подробный код ниже:

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()); 
    } 
} 

И finall мы вызываем его как boolean same = Util.<Integer, String>compare(p1, p2);: Вот что мы должны делать с <Integer, String>?

ответ

4

Это объявление аргументов общего типа, используемых в методе.

Таким же образом, что boolean ключевого слова перед именем методы говорит, что метод возвращает логическое значение, эти аргументы говорят о том, что аргументы типа K и V используются в методе.

Может показаться немного излишним, чтобы их можно было перечислить в начале, когда их также можно увидеть в списке параметров метода, но см. Комментарий Йеспера ниже.

+1

Это не избыточно. Если вы не укажете параметры типа, то как компилятор узнает, являются ли они параметрами типа вместо конкретных имен типов? (Только тот факт, что это одна буква верхнего регистра, автоматически не делает ее параметром типа). – Jesper

+0

@ Jesper хорошая точка, обновленный ответ – codebox

1

В этом контексте он используется для объявления общих типов для определения общего метода. Во время выполнения эти типы будут выведены на основе вызова метода. Это позволяет гарантировать определенный тип безопасности. В вашем примере мы вынуждаем p1 и p2 быть парами одинаковых типов.

Смежные вопросы