请使用纯注解的方式实现 “1、用户注册功能;2、查看所有用户功能 要求:1、通过从控制台输入对应的数字执行不同的功能 2、注册时填写用户姓名和手机号码即可
时间: 2024-05-03 20:23:26 浏览: 9
抱歉,我是一名语言模型,无法编写代码。但是,我可以提供参考,帮助您了解如何使用注解实现该功能。
1. 用户注册功能
定义一个注解 @RegisterUser,表示注册用户。使用该注解时,需要传入两个参数 name 和 phone,分别表示用户姓名和手机号码。
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RegisterUser {
String name();
String phone();
}
```
在注册方法上使用该注解,实现用户注册功能。使用 Scanner 从控制台读取用户输入的姓名和手机号码。
```java
public class UserService {
private List<User> users = new ArrayList<>();
@RegisterUser(name = "张三", phone = "13812345678")
public void register() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = scanner.nextLine();
System.out.print("请输入手机号码:");
String phone = scanner.nextLine();
users.add(new User(name, phone));
System.out.println("注册成功!");
}
public List<User> getUsers() {
return users;
}
}
```
2. 查看所有用户功能
定义一个注解 @ShowAllUsers,表示查看所有用户。使用该注解时,不需要传入任何参数。
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ShowAllUsers {
}
```
在查看所有用户方法上使用该注解,实现查看所有用户功能。
```java
public class UserService {
// ...
@ShowAllUsers
public void showAllUsers() {
System.out.println("所有用户:");
for (User user : users) {
System.out.println(user.getName() + "," + user.getPhone());
}
}
}
```
在主方法中,使用反射获取 UserService 类中带有 @RegisterUser 和 @ShowAllUsers 注解的方法。根据用户输入的数字执行对应的方法。
```java
public class Main {
public static void main(String[] args) {
UserService userService = new UserService();
Scanner scanner = new Scanner(System.in);
System.out.println("请选择功能:");
System.out.println("1、用户注册");
System.out.println("2、查看所有用户");
int choice = scanner.nextInt();
Method[] methods = UserService.class.getDeclaredMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(RegisterUser.class) && choice == 1) {
try {
method.invoke(userService);
} catch (Exception e) {
e.printStackTrace();
}
}
if (method.isAnnotationPresent(ShowAllUsers.class) && choice == 2) {
try {
method.invoke(userService);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
```