版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 https://blog.csdn.net/qian_qian_123/article/details/82225712
创建Person类,Person的属性有:
Strng name 姓名
String sex 性别
Integer age 年龄,
String idNo 身份证号
Boolean isMerried 是否已婚
请生成相应的getter、setter方法。
1、请编写注解@Label,表示所注解对象的中文名称,请把@Label注解标注在Person类和Person的每个属性上面。
2、请编写PersonInput类,负责提示录入人员的相关属性,提示必须是注解@Label所标注的中文名称。
3、请编写PersonDisplay,负责显示人员信息,显示时的属性名称必须为注解@Label所标注的中文名称。
4、PersonInput类与PersonDisplay类实现了共同的接口PersonAction,接口PersonAction有方法process,方法process的签名为:public Person process(Person person);
扫描二维码关注公众号,回复:
3072343 查看本文章
public class Person {
@Label("姓名")
private String name;
@Label("性别")
private String sex;
@Label("年龄")
private Integer age;
@Label("身份证号码")
private String idNo;
@Label("婚否")
private 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;
}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Label {
String value();
}
public interface PersonAction {
public Person process(Person person);
}
import java.lang.reflect.Field;
import java.util.Scanner;
/**
*
* 负责提示录入人员的相关属性,提示必须是注解@Label所标注的中文名称。
*
* @author wendi
*
*/
public class PersonInput2 implements PersonAction {
@Override
public Person process(Person person) {
Class clazz = person.getClass();
Field[] fields = clazz.getDeclaredFields();
Scanner can = new Scanner(System.in);
for (Field field : fields) {
field.setAccessible(true);
try {
Object obj = field.get(person);
if (obj == null) {
String str = field.getAnnotation(Label.class).value();
System.out.println("请输入" + str + ":");
String str1 = can.next();
// field.set(person, str1);
// java.lang.Integer
if (field.getType().getName().contains("Integer")) {
field.set(person, Integer.parseInt(str1));
}
if (field.getType().getName().contains("Boolean")) {
field.set(person, Boolean.parseBoolean(str1));
// field.set(person, Boolean.valueOf(str1));
}
if (field.getType().getName().contains("String")) {
field.set(person, str1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return person;
}
}
import java.lang.reflect.Field;
/**
* 负责显示人员信息,显示时的属性名称必须为注解@Label所标注的中文名称。
*
* @author wendi
*
*/
public class PersonDisplay implements PersonAction {
@Override
public Person process(Person person) {
Class clazz = person.getClass();
Field[] field = clazz.getDeclaredFields();
for (Field field2 : field) {
// 获取属性的Label注解的value参数值
if (field2.isAnnotationPresent(Label.class)) {
String nameField = field2.getAnnotation(Label.class).value();
System.out.print(nameField + ":");
}
// 获得属性的具体值
try {
field2.setAccessible(true);
Object value = field2.get(person);
System.out.println(value);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
return person;
}
}
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
// person.setAge(18);
// person.setIdNo("1234567890");
// person.setIsMerried(true);
// person.setName("小马");
// person.setSex("男");
PersonInput2 input=new PersonInput2();
input.process(person);
PersonDisplay display=new PersonDisplay();
display.process(person);
}
}