Я пытаюсь разобрать строку на основе расположения символов в свойствах, что-то вроде того, что делает внешняя библиотека, такая как beanIo, но без реального использования beanIo (http://beanio.org/2.1/docs/reference/index.html#BuilderApiAndAnnotations)
I хотел бы использовать аннотации, и именно здесь я борюсь, я не думаю, что понимаю их достаточно. Мой вариант использования:
String stringToParse = "0_2_4_MYNAME_MYAGE_";
Объект, который я собираюсь построить после анализа приведенной выше строки, должен выглядеть примерно так:
Record record = new Record(stringToParse); // this should create a key value pairs
/*record = <
"Age": Field{name:"Age",value:"MYAGE", at:13, length:5}
"Name": Field{name:"Name",value:"MYNAME", at:6, length:6}
>
Я хочу добиться этого с помощью аннотации, хотя я не полностью понимаю, как они читаются или должны быть прочитаны, вот что я имею сейчас:
Моя полевая аннотация
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Field {
public String name();
public int at();
public int length();
public String value() default "[unassigned]"; // should be determined using the other values, not passed-in
}
Моя запись аннотации:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Record {
//Not sure what should goes here. Maybe: public HashMap<String, Field> record
}
Вот как я использую его в классе
@Record
public class PersonInfoLine {
@Field(at = 5, length = 6)
private String name;
@Field(at = 13, length = 5)
private String age;
}
Опять же, когда я создаю экземпляр PersonInfoLine со строкой, я хотел бы получить "name" и "age", что-то вроде:
String stringToParse = "0_2_4_MYNAME_MYAGE_";
PersonInfoLine personInfoLine = new PersonInfoLine(stringToParse);
String name = personInfoLine.record.get("name").value; //MYNAME
String age = personInfoLine.record.get("age").value; //MYAGE
Не очень разбираюсь в использовании пользовательских аннотаций, поэтому даже не уверен, что вышеизложенное мне следует go об этом ..