哪位有时间,帮忙写下这个的实现过程,让我参考学习一下(非作业)
创建Person类,Person的属性有:
Strng name 姓名
String sex 性别
Integer age 年龄,
String idNo 身份证号
Boolean isMerried 是否已婚
请生成相应的getter、setter方法。请编写注解@Label,表示所注解对象的中文名称,请把@Label注解标注在Person类和Person的每个属性上面。请编写PersonInput类,负责提示录入人员的相关属性,提示必须是注解@Label所标注的中文名称。请编写PersonDisplay,负责显示人员信息,显示时的属性名称必须为注解@Label所标注的中文名称,PersonInput类与PersonDisplay类实现了共同的接口PersonAction,接口PersonAction有方法process,方法process的签名为:public Person process(Person person);
PersonDisplay和PersonInput具体怎么实现的? annotation interface
[解决办法]
Label.java
@Target({ ElementType.TYPE, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Label {
String chineseLabel();
}Person.java
@Label(chineseLabel = "人员信息")
public class Person {
@Label(chineseLabel = "姓名")
String name;
@Label(chineseLabel = "性别")
String sex;
@Label(chineseLabel = "年龄")
Integer age;
@Label(chineseLabel = "身份证号")
String idNo;
@Label(chineseLabel = "是否已婚(已婚:T,未婚:F)")
Boolean isMerried;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public Boolean getIsMerried() {
return isMerried;
}
public void setIsMerried(Boolean isMerried) {
this.isMerried = isMerried;
}
}
PersonAction.java
public interface PersonAction {
public Person process(Person person);
}PersonInput.java
public class PersonInput implements PersonAction {
@Override
public Person process(Person person) {
if (person == null) {
person = new Person();
}
Class<? extends Person> clazz = person.getClass();
if (clazz.isAnnotationPresent(Label.class)) {
System.out.println(clazz.getAnnotation(Label.class).chineseLabel());
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Object content;
PropertyDescriptor pd;
Method method;
for (Field field : clazz.getDeclaredFields()) {
try {
if (field.isAnnotationPresent(Label.class)) {
System.out.println(field.getAnnotation(Label.class).chineseLabel() + ": ");
} else {
System.out.println(field.getName() + ": ");
}
content = br.readLine();
if (field.getType() == Integer.class) {
try {
content = Integer.parseInt(content.toString());
} catch (Exception e) {
content = -1;
}
}
if (field.getType() == Boolean.class) {
if ("T".equals(content)) {
content = Boolean.TRUE;
} else {
content = Boolean.FALSE;
}
}
pd = new PropertyDescriptor(field.getName(), person.getClass());
method = pd.getWriteMethod();
method.invoke(person, content);
} catch (Exception e) {
e.printStackTrace();
}
}
return person;
}
}
PersonDisplay.java
public class PersonDisplay implements PersonAction {
@Override
public Person process(Person person) {
if (person == null) {
person = new Person();
}
Class<? extends Person> clazz = person.getClass();
if (clazz.isAnnotationPresent(Label.class)) {
System.out.println(clazz.getAnnotation(Label.class).chineseLabel());
}
Object value;
PropertyDescriptor pd;
Method method;
for (Field field : clazz.getDeclaredFields()) {
try {
pd = new PropertyDescriptor(field.getName(), person.getClass());
method = pd.getReadMethod();
value = method.invoke(person);
if (field.isAnnotationPresent(Label.class)) {
System.out.println(field.getAnnotation(Label.class).chineseLabel() + ": " + value);
} else {
System.out.println(field.getName() + ": " + value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return person;
}
}
main
public static void main(String[] args) {
PersonAction input = new PersonInput();
PersonAction display = new PersonDisplay();
Person person = input.process(null);
display.process(person);
}