Делегаты Java?
В зависимости от того, что java-se именно вы имеете в виду, вы j2se можете добиться аналогичного java-api эффекта (передавая метод), используя java-libraries шаблон стратегии.
Вместо такой oraclejdk строки, объявляющей сигнатуру openjdk именованного метода:
// C#
public delegate void SomeFunction();
объявить java-se интерфейс:
// Java
public interface ISomeBehaviour {
void SomeFunction();
}
Для конкретных func-delegate реализаций метода определите javax класс, реализующий поведение:
// Java
public class TypeABehaviour implements ISomeBehaviour {
public void SomeFunction() {
// TypeA behaviour
}
}
public class TypeBBehaviour implements ISomeBehaviour {
public void SomeFunction() {
// TypeB behaviour
}
}
Затем java-libraries везде, где у вас был бы делегат delegate SomeFunction
в C#, используйте вместо jdk него ссылку ISomeBehaviour
:
// C#
SomeFunction doSomething = SomeMethod;
doSomething();
doSomething = SomeOtherMethod;
doSomething();
// Java
ISomeBehaviour someBehaviour = new TypeABehaviour();
someBehaviour.SomeFunction();
someBehaviour = new TypeBBehaviour();
someBehaviour.SomeFunction();
С анонимными openjdk внутренними классами вы даже core-java можете избежать объявления j2se отдельных именованных классов .java и рассматривать их почти java-libraries как настоящие функции-делегаты.
// Java
public void SomeMethod(ISomeBehaviour pSomeBehaviour) {
...
}
...
SomeMethod(new ISomeBehaviour() {
@Override
public void SomeFunction() {
// your implementation
}
});
Это, вероятно, следует java-se использовать только в том delegates случае, если реализация очень java-se специфична для текущего контекста .java и не получит преимуществ java-se от повторного использования.
И, конечно java-api же, в Java 8 они становятся jre в основном лямбда-выражениями:
// Java 8
SomeMethod(() -> { /* your implementation */ });
java
delegates
Делегаты Java?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.