Что ближе всего Java имеет к делегатам .NET Func <> и Action <>? - PullRequest
8 голосов
/ 04 сентября 2011

Очевидно, что в Java нет делегатов или функций в качестве значений первого класса, и вместо них используются интерфейсы, но какой интерфейс ближе всего к делегатам Func <> или Action <> .NET? Есть Runnable и Callable <>, но только в вариантах без параметров.

Поскольку в Java не может быть перегруженных типов с одинаковым именем и разным количеством аргументов универсального типа, я понимаю, что не может быть одного общего имени интерфейса, но могут быть Runnable1 <>, Runnable2 <> и т. Д.

Этот стиль программирования просто не используется в Java или мне не хватает существующих интерфейсов?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2018

Я создал банку для вас и для себя:)

maven info:

<dependency>
    <groupId>com.incarcloud</groupId>
    <artifactId>ac-func-tion</artifactId>
    <version>1.1.0</version>
</dependency>

тогда вы можете написать код, например c #

import com.incarcloud.lang.*;

Action<Integer> actFoo = (x)->{ System.out.println(x); }
actFoo.run(1024);

Func2<Integer, Integer, Integer> actAdd = (x,y)->{ return x+y; }
int sum = actAdd.call(5,6);

Более подробную информацию можно найти здесь https://github.com/InCar/ac-func-tion

0 голосов
/ 04 сентября 2011

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

(интерфейс не является анонимным, у него есть имя, значение и документация, которые могут облегчить чтение кода. С другой стороны, это дополнительная трудность при написании, и вы не можете просто добавить функция, которая соответствует подписи).

У вас есть конкретный вариант использования, для которого вы ищете рекомендацию? Трудно делать обобщенные утверждения;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...