Delegaty w JAVA, lista delegatów

Odpowiedz Nowy wątek
2011-08-16 23:34
0

Szanowni forumowicze,
Szukam i szukam i się tylko coraz bardziej frustruje, może ktoś z Was będzie mi w stanie pomóc. Czy da się w jakiś sensowny sposób zastąpić delegaty w java i stworzyć z nich listę?
W C# to wygląda tak jak podano tutaj:
http://www.java2s.com/Tutoria[...]egate/GenericDelegatelist.htm
Delegaty to jest świetna rzecz w C#, ale Microsoft i jego podejście do "wolnego" rynku już nie...

Dziękuję i pozdrawiam,
A.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan
edytowany 1x, ostatnio: arrowman, 2011-08-16 23:38

Pozostało 580 znaków

2011-08-17 00:07

Trywialnym rozwiązaniem byłoby:

interface Delegate<T> {
    public void call(T value);
}
 
class DelegateList<T> {
    private List<Delegate<T>> delegateList = new ArrayList<Delegate<T>>();
 
    public boolean addDelegate(Delegate<T> delegate) {
        return delegateList.add(delegate);
    }
 
    public void callDelegates(T value) {
        for (Delegate<T> delegate : delegateList) {
            delegate.call(value);
        }
    }
}

Tylko, że teraz trzeba tworzyć explicite klasy anonimowe, które delegują.

Scala jest dużo lepsza jeżeli chodzi o delegaty, domknięcia, itp itd Przykładowy kod wygląda tak:

class DelegatesList[A] {
  private val list = new scala.collection.mutable.ListBuffer[A => Unit]()
 
  def add(a: A => Unit*): Unit = list.append(a: _*)
  def call(a: A): Unit = list.foreach(_(a))
}
 
object Main {
 
  def fun1(x: Int) = println(x + 5)
  def fun2(x: Int) = println(x + 8)
  def fun3(x: Int) = println(x * 7)
 
  def main(args: Array[String]) {
      val list = new DelegatesList[Int]
      list add(fun1, fun2, fun3)
      list call 5
  }
}

Polecam Scalę, C# się chowa przy niej :)

PS:
Byłbym zapomniał. Scala bardzo dobrze integruje się z Javą. Prawie zawsze Scala może dziedziczyć po Javowych klasach (pewnie są jakieś rzadkie wyjątki, mam na myśli enumy, ale po enumach i tak się nie dziedziczy), a często da się także w drugą stronę (o ile zastosuje się do odpowiednich reguł).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-17 00:18

Pozostało 580 znaków

2011-08-17 09:52
0

Aż zaczyna się widzieć jakiś nikły sens życia na tym popapranym Świecie.
Serdecznie dziękuję, Wibowicie:-)


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0