注解习题2

版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 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);

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);

	}
}

猜你喜欢

转载自blog.csdn.net/qian_qian_123/article/details/82225712