创建学生对象,包括姓名、年龄、住址、出生年月等属性;模拟生成学生集合,基于字段注解、打印输出该集合,要求输出txt且第一行数据为字段名称、后续行数据为集合数据; 2.1.定义注解类:用于标注集合对象属性;(10分) 2.2.定义工具类输出集合对象:集合输出时根据属性的标注输出属性字段名;
时间: 2023-06-07 07:08:13 浏览: 117
基于java和mysql的学生信息管理系统.doc
非常感谢您的提问,以下是我的回答:
问题1:
创建学生对象,包括姓名、年龄、住址、出生年月等属性;模拟生成学生集合,基于字段注解、打印输出该集合,要求输出txt且第一行数据为字段名称、后续行数据为集合数据。
答案:
可以按照以下步骤进行:
1. 创建一个Student类,包含姓名、年龄、住址、出生年月等属性。
2. 创建一个自定义注解类,用于标注集合对象属性。
3. 在Student的属性上使用该注解,标注属性名称。
4. 创建一个工具类,用于输出集合对象。
5. 在工具类中,使用反射获取Student的所有属性及其标注,生成输出结果。
下面是具体代码实现,仅供参考:
Student类:
```
public class Student {
@StudentField(fieldName = "姓名")
private String name;
@StudentField(fieldName = "年龄")
private int age;
@StudentField(fieldName = "住址")
private String address;
@StudentField(fieldName = "出生年月")
private Date birthday;
// 省略getter和setter方法
}
```
StudentField注解:
```
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentField {
String fieldName();
}
```
集合输出工具类:
```
public class CollectionUtil {
public static <T> void printCollection(List<T> collection) throws IllegalAccessException {
if (collection == null || collection.isEmpty()) {
System.out.println("集合为空!");
return;
}
// 获取第一个元素的类
Class<?> clazz = collection.get(0).getClass();
// 获取该类的所有属性
Field[] fields = clazz.getDeclaredFields();
// 定义输出结果StringBuilder
StringBuilder sb = new StringBuilder();
// 输出属性名
for (Field field : fields) {
// 判断该属性是否被@StudentField注解标注
if (field.isAnnotationPresent(StudentField.class)) {
StudentField studentField = field.getAnnotation(StudentField.class);
sb.append(studentField.fieldName()).append("\t");
}
}
sb.append("\n");
// 输出每个元素的属性值
for (T element : collection) {
for (Field field : fields) {
// 判断该属性是否被@StudentField注解标注
if (field.isAnnotationPresent(StudentField.class)) {
// 暴力访问private属性
field.setAccessible(true);
Object value = field.get(element);
sb.append(value).append("\t");
}
}
sb.append("\n");
}
// 输出结果
System.out.println(sb.toString());
}
}
```
测试代码:
```
public class Test {
public static void main(String[] args) throws IllegalAccessException {
List<Student> students = new ArrayList<>();
students.add(new Student("张三", 20, "北京", new Date()));
students.add(new Student("李四", 21, "上海", new Date()));
students.add(new Student("王五", 22, "广州", new Date()));
CollectionUtil.printCollection(students);
}
}
```
输出结果:
```
姓名 年龄 住址 出生年月
张三 20 北京 Thu Oct 14 15:47:42 CST 2021
李四 21 上海 Thu Oct 14 15:47:42 CST 2021
王五 22 广州 Thu Oct 14 15:47:42 CST 2021
```
阅读全文