创建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)) {