Delegaty w JAVA, lista delegatów

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/Tutorial/CSharp/0180__delegate/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.

1

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ł).

0

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

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