读书人

哪位有时间帮忙写下这个的实现过程

发布时间: 2013-11-14 22:02:51 作者: rapoo

哪位有时间,帮忙写下这个的实现过程,让我参考学习一下(非作业)
创建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);
}

读书人网 >J2SE开发

热点推荐