Да, но использование интерфейса означает, что вы должны создать интерфейс для каждого обратного вызова, что означает, что каждая функция, которую вы хотите передать, установлена. Создание класса делегата для обработки этого дает вам (не истинный указатель на функцию), а функцию, которую нужно передать, и если вы используете родовой тип как возвращаемый тип, вам не нужно приводить, что сокращает узкое место практически до нуля.
Делегат c # (MultiCastDelegate, чтобы быть правильным) получает информацию от использования метода MethodInfo, что аналогично тому, что вам нужно сделать для класса Delegate, используя java.lang.reflect.method. Я разместил свой код для класса Delegate (T) на другой форме этого сайта, посвященной этой проблеме. Я делаю это потому, что (да) из C ++ мне нужен лучший способ для передачи функций (особенно Void), чем создание интерфейса для функции on или более. Теперь я могу выбрать функцию заполнения информации о параметрах для нее.
Voila`! Хороший и удобный без заметных потерь в скорости от JIT или JVM. И если бы я изучал программирование на Java только неделю, любой программист мог бы это сделать.
Кроме того, он очень хорошо работает при создании базового слушателя и базового интерфейса для передачи в слушателе. Больше не нужно писать другого слушателя, потому что имя функции изменилось. Создание класса делегата имеет большие преимущества, так как оно очень удобно и проходимо.