首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

哪位有时间,帮忙写下这个的实现过程,让小弟我参考学习一下(非作业)

2013-11-14 
哪位有时间,帮忙写下这个的实现过程,让我参考学习一下(非作业)创建Person类,Person的属性有:  Strng name

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

热点排行