По моему опыту, в JDK нет такого легкодоступного интерфейса. Дженерики только пришли поздно в игру Java. До этого была необходимость передавать несколько типизированных аргументов обратному вызову в полутиповом безопасном виде и без предварительного знания структуры этих аргументов (я говорю «полупериодный безопасный», потому что слушатели событий были изобретены для проверки типа события). и снимали по мере необходимости). Вы не могли бы построить этот механизм без обобщений, и они никогда не перепроектировали весь JDK, чтобы иметь в виду обобщения (за исключением API коллекций и некоторых других). Это было бы грандиозным предприятием с небольшими выгодами (в конце концов, все работало , как ожидалось).
Следовательно, шаблон наблюдателя / слушателя, который распространен в библиотеках JDK (см. java.util.EventObject
, java.util.EventListerner
и их использование). Java также считает, что при определении интерфейса EventListener
он должен быть немного более подробным. Для более ясных реализаций специализированные реализации этого шаблона должны заставить имя метода обратного вызова демонстрировать назначение кода (которое обычно также совпадает с именем события). Например, ActionEvent#actionPerformed(ActionEvent e)
.
Другой возможной причиной отсутствия этого интерфейса является то, что он не используется в самом JDK. Иногда вы хотите, чтобы Callback<T>
другие для Callback<T, V>
или даже Callback<T, R, V>
и т. Д. Предоставление этих интерфейсов без какого-либо реального варианта использования (внутри JDK) на самом деле не очень политика проектирования. Отсутствие поддержки для таких полезных конструкций является основной причиной существования Guava и Apache Commons (среди прочих).
В любом случае, я согласен с @JB Nizet, что вы должны использовать Guava. Мы не указали, почему и как вы используете интерфейс, так что это оставляет много места для спекуляций, но по любой причине у Guava, вероятно, будут другие функции, которые могут пригодиться.