Bellow zu bekommen, ist meine Gewohnheit Annotation: -Ich versuche, benutzerdefinierte Anmerkung in Java zu verwenden. Aber nicht in der Lage die Anmerkung in
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InputBox{
int width() default 20;
int length() default 20;
String placeholder();
String title();
String friendlyName();
String name();
}
Hier habe ich die Anmerkung bin mit: -
public class Table {
private long id;
@InputBox(width = 25 ,length = 25, placeholder = "" , title = "" , friendlyName = "" , name = "")
public String name;
@InputBox(length = 10,placeholder = "",title = "" , friendlyName = "" , name = "")
private int age;}}
Parser: - Hier ist classname bin vorbei die bekommen Anmerkung Details, aber nicht in der Lage die Anmerkung und isAnnotationPresent Methode, die zu null-Zeiger-Ausnahme zu erhalten -
public JSONArray getFormMetaData(String className) throws InvocationTargetException, IllegalAccessException {
Class cl = null;
try{
cl = Class.forName(className);
} catch(ClassNotFoundException e){
e.printStackTrace();
}
JSONArray jsonArray = new JSONArray();
for(Field f: cl.getDeclaredFields())
{
if(f.getDeclaredAnnotations().length >0){
if(f.isAnnotationPresent(InputBox.class)){
JSONObject obj = AnnotationProcessor.processInputBoxAnnotation(f);
obj.put("type","text");
jsonArray.add(obj);
}}}
Wenn ich die gleiche anno am Zugriff auf In einer statischen Hauptmethode erhalte ich korrekte Ergebnisse. Ex: -
public class Haupt {
public static void main(String[] args) {
Table.class.getDeclaredFields()[1].getDeclaredAnnotations();
}
}
Aber wenn ich Ergebnisse versuche durch api Aufruf zu bekommen ich keine Anmerkung bin immer.
So erhalten Sie einen Nullpointer in der If-Bedingung? –
Ja f.isAnnotationPresent (InputBox.class) gibt eine Nullzeiger-Ausnahme. –
Scheint, dass Ihre Annotation @InputBox nicht im Klassenpfad der Laufzeit enthalten ist. Wie hast du es zum Klassenpfad hinzugefügt? –