Annotations

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe mich mit annotations beschäftigt und u.a auch die in diesem Forum geposteteten Threads dazu gelesen. Ich weiss nun wie ich sie anwenden kann. Mir fehlt allerdings noch das Verständnis für deren Nutzen. Könnt ihr mir vielleicht sagen wo es sinnvoll ist annotations einzusetzen.
 
S

SlaterB

Gast
hehe, ich habe gerade Latein gelernt, aber niemand in der Stadt spricht lateinisch,
wozu ist Latein gut? ;)

das ist ja eine merkwürdige Vorgehensweise,
ich selber weiß jetzt auch nicht genau wozu das gut ist,
google liefert schnell
http://de.wikipedia.org/wiki/Annotation_(Java)
http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html

oder wolltest du eher eine Forum-Diskussion führen?
 
G

Guest

Gast
Hab mir die Links bereits durchgelesen. Hab auch Beispiele dazu gemacht. Momentan fällt mir aber kein konkretes Beispiel ein bei welchem der Einsatz von Annotations sinnvoll wäre.

Vielleicht könnt ihr mir eines geben.
 
L

Leroy42a

Gast
Anonymous hat gesagt.:
Momentan fällt mir aber kein konkretes Beispiel ein bei welchem der Einsatz von Annotations sinnvoll wäre.

Dann würde es mich solange auch gar nicht interessieren. :bae:

Im Ernst: Ich lehne mich mal aus dem Fenster, indem ich behaupte,
daß bisher weniger als 1 % der Forenteilnehmer überhaupt jemals
mit Annotations gearbeitet haben. :cool:
 
B

Beni

Gast
2 Nutzungsarten fallen mir direkt ein: zusaetzliche Pruefungen mit dem Compiler, z.B. das @override das dem Compiler sagt "diese Methode muss ueberschrieben sein, ansonsten ist das Programm falsch".

Und dann automatisches Sammeln von Informationen zur Laufzeit. Z.B. will man ein paar Methoden haben, die irgendwas mathematisches berechnen. Dann koennte man eine Annotation haben die sowas erlaubt:
Code:
public class Mathe{
  @Description( name='Addition", shorthand="+", info="Addiert zwei Zahlen" )
  @Inversion( "minus" )
  int plus( int x, int y ){
    return x+y;
  }

  @Description( name='Division", shorthand="/", info="Dividiert zwei Zahlen" )
  @Inversion( "mul" )
  @Exception( first={}, second={ 0 } )
  int div( int x, int y ){
    return x+y;
  }
 ...
}
Das Programm koennte nun all diese Methoden dem Benuzer praesentieren, und er kann z.B. in einem Menue eine der Methoden auswaehlen...
 
G

Guest

Gast
Das erste Beispiel kann ich nachvollziehen. Bei dem zweiten hab ich allerdings Probleme. Es wäre nett wenn du das etwas ausführlicher erläutern könntest.
 
L

Leroy42a

Gast
Wenn ich Beni richtig verstehe (hab' noch nie was mit annotations gemacht)
kann man sich zur Laufzeit eine Tabelle der Art

Code:
+ Addition "addiert zwei Zahlen" rufeFunktionAuf
/ Division "dividiert zwei Zahlen" rufeFunktionAuf

aus den annotations erstellen lassen und via Buttons (rufeFunktionAuf)#
dann direkt diese Funktionen aufrufen.
 
L

Leroy42a

Gast
Nachtrag:

... wobei ich hier nicht unbedingt den Nutzen von Annotations erkenne. ???:L

Sowas würde ich eher Javaseitig, also mit Wald- und Wiesen- Bordmitteln,
anstelle von annotations machen.

Code:
interface Funktion {
  String getShortHand();
  String getDescription();
  int call(int x, int y);
}

Funktion plus = new Function() {
  public String getShortHand() {return "+";}
  public String getDescription() {return "addiert zwei Zahlen";}
  int call(int x, int y) {return x+y;}
}
 

Wildcard

Top Contributor
Interessant sind Annotiations für jedes Java Programm das Code generiert oder verändert (Beispiele EMF, Obfuskatoren).
Annotations dienen hier zur Steuerung der Programmlogik.
So lassen sich beispielsweise mit EMF aus Java-Interfaces Daten Modelle generieren. Um die Kopplung und das Verhalten der Objekte zu beschreiben werden die reinen Interfaces mit festgelegten Annotations angereichert.
Das Java diese Funktionalität direkt zur Verfügung stellt, hat für Client Code den Vorteil das sie keinen eigenen Parser zu implementieren brauchen. Die Reflection API ist für diesen Schritt völlig ausreichend.
 
B

Beni

Gast
Leroy42a hat gesagt.:
Wenn ich Beni richtig verstehe (hab' noch nie was mit annotations gemacht)
kann man sich zur Laufzeit eine Tabelle der Art

Code:
+ Addition "addiert zwei Zahlen" rufeFunktionAuf
/ Division "dividiert zwei Zahlen" rufeFunktionAuf

aus den annotations erstellen lassen und via Buttons (rufeFunktionAuf)#
dann direkt diese Funktionen aufrufen.
Jop, genau das.

Zu deinem Interface: das funktioniert ja noch ganz gut, wenn es nur int(int,int)-Methoden gibt. Wenn aber noch verschiedene Typen und Anzahl Argumente reinkommen, wird es mühsam.
Ausserdem musstest du neue Klassen (wenn auch anonyme) erstellen, mit Annotations muss man nur die Methoden schreiben (gib es zu, du hast mehr Code geschrieben und weniger gesagt :wink: ).

Wenn Geschwindigkeit ein Problem ist, sind solche Spielchen mit Reflection natürlich nicht mehr so gut :bae: .
 

byte

Top Contributor
Leroy42a hat gesagt.:
... wobei ich hier nicht unbedingt den Nutzen von Annotations erkenne. ???:L

Sowas würde ich eher Javaseitig, also mit Wald- und Wiesen- Bordmitteln,
anstelle von annotations machen.

Ein gutes Beispiel für Annotations sind EJBs. Die ältere Version 2.0 hat noch auf den genannten "Bordmittel" basiert. In der Praxis sehr lästig und umständlich. In der neuen Version 3.0 werden Annotations zum Markieren genutzt und auch wenn ich bisher nicht mehr damit gearbeitet habe, scheint das doch eine extreme Erleichterung zu sein.

Ein anderer Anwendungsfall, wo Annotations echt nett sind: JAXB. Da kann man mit Hilfe von Annotations direkt den Java-Code mit XML-Schema Typen binden und die Objektstrukturen dann automatisch serialisieren/ deserialisieren (in und aus XML-Dateien).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben