Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Annotations bleiben zur Laufzeit erhalten, Kommentare nicht. Das kann man verwenden, um Code leichter (ohne Interfaces) zu verbinden.
Z.B. benötige ich in einem meiner Projekte verschiedene Methoden, die über eine Scriptsprache angesprochen werden. Man tippt dann "sqrt( 12 )" ein, und eine Methode soll die Wurzel ausrechnen.
Ich kann da entweder ein Interface basteln, mit einer Methode "getName" und "invoke", dann eine Klasse "Sqrt", "Pow", "Sin"... und Objekte dieser Klassen irgendwo registrieren.
Oder ich benutz Annotations, und schreibe lediglich eine einzige Klasse; mit Reflection kann man die Methoden dann extrahieren.
Die Annotation sieht so aus:
Code:
@Retention( RetentionPolicy.RUNTIME )
@Target( ElementType.METHOD )
public @interface Extractable{
public String namespace();
public String name();
public String type();
}
Dann wird sie in einer beliebigen Klasse verwendet:
Code:
public class NativeMath {
@Extractable( name="pow", namespace="util.math", type="float(float,float)" )
public Value pow( Machine machine, Value[] values ) throws MachineException{
return machine.getValues().getFloat( (float)Math.pow( values[0].asFloat(), values[1].asFloat() ));
}
@Extractable( name="sqrt", namespace="util.math", type="float(float)" )
public Value sqrt( Machine machine, Value[] values ) throws MachineException{
return ...
}
...
}
An einer anderen Stelle...
Code:
Machine machine = ...
extract( new NativeMath(), machine );
Nicht wenn man 100 Methoden so implementiert. Dann ist es wesentlich einfacher als z.B. Vererbung, Interfaces, etc...
Noch ein Vorteil von Annotations gegenüber Kommentaren: sie sind typisiert und werden vom Compiler getestet. Da wird ein "int"-Wert auch tatsächlich eine Zahl sein, und nicht plötzlich ein String (was man in Kommentaren ohne Probleme machen kann).
Ein anderes gutes Anwendungsbeispiel für Annotations sind (die neuen) EJBs. Da hat sich durch die Annotations in Version 3.0 einiges vereinfacht gegenüber früheren Versionen.
ja genau. Man kann jetzt ein Datenmodell erstellen indem man nur in den Java Klassen entsprechende Annotations macht und daraus kann man dann auch die DDL/DML Scripte erzeugen kann.
Ich verwende EJB nur noch selten mit Webanwendungen. EJB ist wohl die stärkste Persistenzmaschine für Java überhaupt. Ich bin nur gespannt, ob ich mit der Embeddable die gleiche Performance geboten bekomme, wie auf einem AS.
Ich hab Hibernate schon in genügend non-Webanwendungen eingesetzt. Wenn man sich an die best-practices hält und diverse kleinere Performancemaßnahmen ergreift ist es recht flott und vor allem sehr komfortabel.
Eventuell noch Spring dazu und alles is wunderbar
Ich würde es auch in Client-Anwendungen einsetzen. Problem ist, dass der Tag keine 40 Stunden und die Woche keine 20 Tage hat. Soviele Ideen und keine Zeit, bzw. wenn ich daheim bin, lese ich auch noch gerne, aber kann mich kaum mehr zum Coden aufraffen.
An Ideen mangelt es nun wirklich nicht (auch wenn sie alle etwas mit Eishockey zu tun haben)
Das Phenomen kenn ich. Deswegen bin ich auch jedes Mal verblüfft, wenn Leute aus der Branche offenbar dann auch noch Coden als Hobby haben. Wenn ich von morgens bis abends an der Kiste saß (bei mir derzeit Diplomarbeit), dann bin ich irgendwann froh, wenn ich das Notebook-Display einfach runterklappen kann.
Dem kann ich mich nur anschließen. Ich habe mich in den letzten paar Wochen zum ersten mal mit Hibernate 3 beschäftigt und finde es sehr viel angenehmer als EJB 2 mit diesen furchtbaren Deployment-Descriptoren. Wenn man mehr als 2 Beans damit verwaltet. blickt man schon nicht mehr durch. Dann noch diese ganzen unnötigen Interfaces. Das ist bei Hibernate 3 mit Annotations alles viel schöner. Hier kannst du einfach eine Java Bean mit Annotations versehen und persistieren. Da kommt Freude auf
Ich hab Hibernate schon in genügend non-Webanwendungen eingesetzt. Wenn man sich an die best-practices hält und diverse kleinere Performancemaßnahmen ergreift ist es recht flott und vor allem sehr komfortabel.
Leider hat man mir eben nen Knüppel in die Beine geworfen. Netbeans findet nichts, was er für @Id importieren könnte. Obwohl ich die mit Hibernate Annotations kommende ejb3-persistence.jar als Library im Projekt habe, kennt er auch kein javax.persistence, obwohl das Paket darin ist.
Aber ich kann Alt-Shift-F kloppen wie blöde, der findet nix und weigert sich auch händisch was aus javax.persistence zu importieren.
Ah.. moment...
Er macht zwar kein Auto-Completion für javax.p.., aber er schluckt den Import von javax.persistence.* und gibt dann auch Ruhe. Haue ich dennoch nochmal Alt-Shift-F, mault er kurz, dass er nix für Id findet, zeigt aber im Source keinen Fehler. Ein Rebuild zieht er auch anstandslos durch...