Framework mit Annotations

23

Bekanntes Mitglied
Hallo,

ich schreibe gerade ein kleines Framework zur Validierung von User Daten.

Für folgende Situation habe ich keine Lösung:

@EineAnnotation(wert1="NameEinerKlasse")

wert1 beinhaltet den Namen einer Klasse die durch einen Entwickler der das Framework nutzt geschrieben worden ist.

z.b. MeineKlasse

Ich möchte nur eine Instanz der Klasse erzeugen jedoch bräuchte ich den genaue Pfad (Package) für Class.forName();

Wie kann ich das lösen? Sollte ich eine Konvention einführen an welchem Ort der Entwickler seine Klassen ablegt?

Viele Grüße
 

Noctarius

Top Contributor
Java:
public Interface Foo {
}

public @interface MyAnnotation {
    Class<? extends Foo> value();
}
 
M

maki

Gast
ich schreibe gerade ein kleines Framework zur Validierung von User Daten.
Meinst du so wie JSR 303 oder die Hibernate Validation API? (Wink mit dem Scheunentor ;) )

Code:
@EineAnnotation(wert1="NameEinerKlasse")
Schlechte Idee, warum String nehmen wenn es doch um Class Objekte geht?
 

Der Müde Joe

Top Contributor
Java:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Instanceable {
	
	Class<?> clazz();
}
 

23

Bekanntes Mitglied
Danke :)

Dann noch eine Frage:

Objekt.class.getDeclaredFields()

Wie ermittle ich den Objekt Typ eines Felds? Ich muss sicherstellen das es ein bestimmer Typ ist.

Hm oder kann ich schon in der Annotaion festlegen, dass diese nur zb bei einem Feld von dem Typ Collection genutzt werden darf?

---

Noch eine viel wichtigere Frage:
Kann ich eine Referenz auf das Feld bekommen?!

---

Ich glaube es wird nun etwas verwirrend für euch deswegen erklär ich mal was ich vor habe :)

Es gibt eine View. In der View sind verschiedene UI Elemente zb eine TextBox und darüber soll eine Annotation geschrieben werden, die dem Framework sagt welchen Validierungstest (Deswegen die Frage bzgl. Class) ausgeführt werden soll, welches andere Label rot gefärbt werden soll (Error feedback) und wie die Fehlermeldung ist.

Von der View habe ich zur Laufzeit eine Instanz und ich brauche die Metainformationen aus der Klasse also die Annotations muss aber auch in der Lage sein die konkrete Instanz verändern zu können. (Zugriff auf die Objekte)
 
Zuletzt bearbeitet:

Landei

Top Contributor
"Eine Veränderung der konkreten Instanz" klingt ziemlich daneben, denn Java macht einem selbstveränderlichen Code nicht gerade einfach. Annotations können selbst überhaupt nichts tun, also auch keinen Typ eines Felds erzwingen, Annotations sind nur eine Art "Hinweise", was irgendjemand anderes zur Compilezeit oder Laufzeit tun soll.

Alles andere sollte gehen.
Ich kann mir nicht vorstellen, dass dir das hier jemand so geduldig und ausführlich erklärt wie Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 24 Reflection und Annotationen

Was du vorhast, hört sich gefährlich nach Over-Enginieering an, zumindest in einer statischen Sprache wie Java. Sicher gibt es ClassLoader, DynamicProxy und Byte-Code-Manipulatoren (etwa javassist), aber das sind schwere Geschütze, die man nicht aus Dudeldei auffährt. Na ja, wer frei von Schuld ist, werfe den ersten Stein....
 
Zuletzt bearbeitet:

23

Bekanntes Mitglied
Hm ich beschreibe das Problem nochmal etwas anderst:

Also es geht um Usereingabe Validierung:

Es gibt ein Label z.B. Email (Muss eingefärbt werden), ein Errorlabel (Muss eingeblendet werden) , eine Textbox mit dem Wert
und eine Testklasse z.B. EmailTest.

Ich hatte schon einge Klassen geschrieben und hatte folgendes Design zur Validierung:

Java:
validator.add(view.getLabel(), view.getErrorlabel(), new EmailTest(view.getTextbox.getText());
...
validator.validate();

...

validator.addFormValidatedHandler(this);

Das sieht ok aus aber ich finde es immer noch zu unmodern für ein Framework.

Deswegen war nur die Idee in der View folgendes zu machen:

Java:
public class View {
  
  private Label label444;
 
  private Label errorlabel666;

  @DieAnnotation(test = EmailTest.class, label = "label444", errorlabel = "errorlabel666")
  private Textbox text;

  
}

Damit ich das label einfärben kann und das errorlabel einblenden kann bräuchte ich halt eine Referenz darauf.

Was haltet ihr davon? Oder gibt es bessere Wege?

Label und Co. sind keine Swing Objekte!
 
Zuletzt bearbeitet:

Noctarius

Top Contributor
Ich denke bevor du da weiter um die Dinger herum gurkst und versuchst das selber zu machen schau dir JSR 303, bzw direkt Hibernate Validations an. Dort kannst du ein Annotation als Constraint deklarieren und einen eigenen Validator dazu schreiben. Genau das was du brauchst / willst.
 

23

Bekanntes Mitglied
Ich glaube das wird aber wieder zu kompliziert für den Entwickler :-D

Ziel ist es ja diese ewigen und tausend if Abfragen einzusparen...

Hm in Java ruft man ja Objektmethoden so auf:

Java:
objekt.methode1();

Wenn ich einen String habe der "methode1()" beinhaltet kann ich den irgendwie zu einem ? Typ machen, dass ich schreiben kann:

HTML:
objekt.[magic("methode1()")]

?
 

Noctarius

Top Contributor
Nein der braucht auch nur ein Annotation setzen, genau wie bei dir. Du kannst ja quasi auch dein Annotation so umsetzen, dann als Constraint deklarieren und den Validator implementieren.
 

Landei

Top Contributor
Lies dir wirklich mal das Kapitel in der Insel durch, ehrlich!

Also: Hast du das Objekt, bekommst du mit getClass das Klassen-Objekt. Das kannst du nach einer Methode mit gegebenen Namen und Argumenten durchsuchen. Hast du das Methoden-Objekt, kannst du die Methode mit invoke(obj, args...) aufrufen.
 
Zuletzt bearbeitet:

23

Bekanntes Mitglied
Danke hab alles hinbekommen :)

Method m = o.getClass().getMethod(v.daserrorlabel(), null);

System.out.println(m.invoke(o, null));

Ist das noch performant? Kostet das viel?
 

Noctarius

Top Contributor
Normal macht Reflection nicht soooooviel aus wie immer manche behaupten. Über Optimierung kann man sich Gedanken machen wenn wirklich ein Falschenhals besteht. Schneller geht es nur mit Bytecode Enhancement und das willst du nicht machen ^^
 

Noctarius

Top Contributor
Naja du kannst dir natürlich ein Framework bauen, welches den passenden JavaScript Code erzeugt (quasi wie in Java mit Bytecode Enhancement)
 

23

Bekanntes Mitglied
Ja ich lese grade über GWT Generatoren aber hm das wäre noch mehr arbeit und so viel Zeit habe ich gerade nicht :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
T Neuling erbittet Meinung zu Framework Java Basics - Anfänger-Themen 11
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
O Framework/Library Java Basics - Anfänger-Themen 5
O Framework Java Basics - Anfänger-Themen 2
N Umgang mit Domain Framework Java Basics - Anfänger-Themen 2
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
D Erste Schritte Welches Framework passt zu mir ? Java Basics - Anfänger-Themen 1
M Java Media Framework installieren - Win 7 Java Basics - Anfänger-Themen 6
F Java Media Framework Java Basics - Anfänger-Themen 5
D script.aculo.us requires the Prototype JavaScript framework >= 1.6.0.2 Java Basics - Anfänger-Themen 2
Dit_ Framework was ist das ? Java Basics - Anfänger-Themen 6
U Welche(s) Framework(s) wären geeignet? Java Basics - Anfänger-Themen 8
StrikeTom Welche Dateitypen unterstützt JMF (Java Media Framework)? Java Basics - Anfänger-Themen 6
X Ist das Spring Framework Einsteigerfreundlich? Java Basics - Anfänger-Themen 2
M Webseiten mit oder ohne Framework Java Basics - Anfänger-Themen 5
G Framework für eine Flexible Oberfläche! Java Basics - Anfänger-Themen 9
M Was ist ein FrameWork Java Basics - Anfänger-Themen 5
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
G Framework für Kategorien Java Basics - Anfänger-Themen 2
V Web Framework Java Basics - Anfänger-Themen 4
G Was ist ein Framework Java Basics - Anfänger-Themen 1
V Framework usw Java Basics - Anfänger-Themen 7
B Browsergame - welches Framework? Java Basics - Anfänger-Themen 2
M Source Code von Collection Framework, etc. Java Basics - Anfänger-Themen 3
G Collection Framework Java Basics - Anfänger-Themen 8
L [Web/Servlets] welches Framework verwenden? Java Basics - Anfänger-Themen 10
B schon mal mit JavaBeans Activation Framework gearbeitet? Java Basics - Anfänger-Themen 2
G Java Collections Framework : id + 5 Werte , gibt es sowas Java Basics - Anfänger-Themen 4
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
Y Java Annotations Java Basics - Anfänger-Themen 4
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
6 Annotations Java Basics - Anfänger-Themen 3
C Annotations Java Basics - Anfänger-Themen 3
Landei Annotations statt Listeners? Java Basics - Anfänger-Themen 36
F Annotations Java Basics - Anfänger-Themen 3
G Annotations Java Basics - Anfänger-Themen 2
G Annotations Java Basics - Anfänger-Themen 10
S annotations Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben