Если Вы имеете в виду что-то как.NET анонимный делегат, я думаю, что анонимный класс Java может использоваться также.
public class Main {
public interface Visitor{
int doJob(int a, int b);
}
public static void main(String[] args) {
Visitor adder = new Visitor(){
public int doJob(int a, int b) {
return a + b;
}
};
Visitor multiplier = new Visitor(){
public int doJob(int a, int b) {
return a*b;
}
};
System.out.println(adder.doJob(10, 20));
System.out.println(multiplier.doJob(10, 20));
}
}
Метод (еще) не является первоклассным объектом в Java; Вы не можете передать указатель функции как обратный вызов. Вместо этого создайте объект (который обычно реализует интерфейс), который содержит метод, Вы нуждаетесь и передаете это.
Предложения по закрытиям в Java— который обеспечил бы поведение, Вы смотрите for— были сделаны, но ни один не будет включен в предстоящий выпуск Java 7.
Когда мне нужен этот вид функциональности в Java, я обычно использую Шаблон "наблюдатель" . Это действительно подразумевает дополнительный объект, но я думаю, что это - очевидный способ для движения и является широко понятым шаблоном, который помогает с удобочитаемостью кода.
Немного придирки:
Мне кажется, что люди предлагают создать отдельный объект, но это кажется overkill
Передача обратного вызова включает создание отдельного объекта практически на любом объектно-ориентированном языке, поэтому его вряд ли можно считать излишеством. Вероятно, вы имеете в виду, что в Java требуется создать отдельный класс, который является более подробным (и более ресурсоемким), чем в языках с явными функциями или замыканиями первого класса. Однако анонимные классы, по крайней мере, уменьшают многословность и могут использоваться встроенными.
Проверьте замыкания, как они реализованы в библиотеке lambdaj. На самом деле их поведение очень похоже на поведение делегатов C #: