Startseite > .NET, C#, Java > Java Events im Vergleich zu C# Events

Java Events im Vergleich zu C# Events


Ich mache hier mal ein Vergleich um zu zeigen, was ich mit unnötige Komplexität und Unübersichtlichkeit meine.

 


Erstellen von Custom Events

Java

Java
1
23
45
    public interface EventCustom extends EventListener
    {        public void fireEvent(EventObject e);
    } 
GeSHi 1.0.8.8
Java
1
23
45
67
89
1011
1213
1415
1617
18
    protected Vector<EventCustom> listenerList = new Vector<EventCustom>();
     public void addEventListener(EventCustom eventListener)
    {        listenerList.add(eventListener);
    }      public void removeEventListener(EventCustom eventListener)    {
        listenerList.remove(eventListener);    }
        private void fireEndOfGame(EventObject e)
    {        for(EventCustom listener: listenerList)
            listener.fireEvent(e);    }
 
GeSHi 1.0.8.8

C#

C#
1
    public delegate void EventCustomHandler(object sender);
GeSHi 1.0.8.8
C#
1
private EventCustomHandler CustomEvent;
GeSHi 1.0.8.8

 


Event aufrufen

Java

Java
1
fireEndOfGame(new EventObject(this));
GeSHi 1.0.8.8

C#

C#
1
if(CustomEvent!=null) CustomEvent(this);
GeSHi 1.0.8.8

 


Listener hinzufügen

Java

Java
1
23
45
67
89
anyObject.addEventListener(new EventCustom()
{    @Override
    public void fireEvent(EventObject e)    {
         // Bla bla bla    }
}); 
GeSHi 1.0.8.8

oder

Java
1
23
45
67
89
    private EventCustom eventCustom = new EventCustom()
    {        @Override
        public void fireEvent(EventObject e)        {
            // bla bla bla        }
    }; 
GeSHi 1.0.8.8
Java
1
anyObject.addEventListener(eventCustom);
GeSHi 1.0.8.8

oder

Java
1
23
45
67
89
1011
1213
1415
public class CustomEvent implements EventCustom
{    private Object sender;
            public CustomEvent(Object sender)
    {        this.sender = sender;
    }            @Override    public void fireEvent(EventObject e)
    {        // bla bla bla
    }}
GeSHi 1.0.8.8
Java
1
private CustomEvent customEvent = new CustomEvent(this);
GeSHi 1.0.8.8
Java
1
anyObject.addEventListener(eventCustom);
GeSHi 1.0.8.8

 

C#

C#
1
anyObject.CustomEvent += AnyObject_CustomEvent;
GeSHi 1.0.8.8
C#
1
23
4
private void AnyObject_CustomEvent(object sender) 
{     // bla bla bla
}
GeSHi 1.0.8.8

oder

C#
1
23
4
this.CustomEvent += delegate(object sender) 
{    // bla bla bla
};
GeSHi 1.0.8.8

 

So… Genug für heute….

Advertisements
Kategorien:.NET, C#, Java Schlagwörter: , , , ,
  1. 18. Februar 2011 um 12:32

    Da gefällt mir die Java-Version doch duetlich besser 😉
    Man sieht und versteht, was passiert.

    Irgendwie habe ich auch den Eindruck, du schiesst hier mit Kanonen auf Spatzen und verwendest EventListener, wo es nicht notwendig wäre ?

    • 18. Februar 2011 um 17:32

      Wie du schon sagtes… Geschmackssache 🙂 Mir persönlich gefällt kurze pregnante Codes ohne viel umschweife.

      Es kann schon sein, dass ich mit Kanonen auf Spatzen schiesse… Aber wie soll ich dann zum Beispiel folgende Problemstellung simpel realisieren…
      Klasse A läuft auf Thread B… Klasse B zeigt den Status von Klasse A… Also so etwas wie eine Statusbar… Klasse B läuft auf Thread A… Nun soll Klasse A, Klasse B „bescheid“ geben, sobald z.B. ein Bild fertig geladen wurde oder eine andere Operation zuende… operiert 🙂 wurde…
      Natürlich kann ich Klasse A und B ziemlich eng verstricken, aber dann leidet die Wiederverwendbarkeit stark drunter…
      Deswegen greife ich meist bei so etwas immer auf Events…
      Aber ich adaptiere sehr gerne bessere bzw. einfachere Lösungen…

  2. 18. Februar 2011 um 19:21

    Lass mal, dafür sind Events ja gedacht 😀
    Für ein kleines Beispiel sieht das alles in Java vielleicht komplexer aus.
    Aber eine Menge Code lässt sich ja wieder verwenden, wenn man seine Klassen vernünftig strukturiert. So kann man auch mit Java zu kurzem pregnantem Code kommen.

    Eine Klasse mit mehr als 1000 Codezeilen ist eigentlich schon zu groß und sollte überdacht werden.
    Als Java noch von Sun war, gab es mal einen JAVA-Style-Guide (gibt es vielleicht immer noch). Da fand sich bspw. so ein Satz wie: Eine Klasse sollte möglichst auf dem Bildschirm ohne zu scrollen komplett sichtbar sein. (Was sicherlich nicht immer gelingt ;-)).

    • 18. Februar 2011 um 22:15

      Da hast du schon recht… Diese Faustregel gilt ja im Grunde nicht nur für Java… Überarbeiten muss ich die Klasse dann eh… Die Event Handlers werden ausgelagert…. Die belegen ja an sich schon 1/3 der Datei…

  1. No trackbacks yet.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: