如何在Java中使用firstName拼接lastName作为对象名创建Employee对象
问题说明
Java是静态编译型语言,不支持运行时动态生成变量名,你代码中的Employee firstName + lastName = new Employee();属于语法错误,编译阶段就无法通过。
你需要实现的「用firstName拼接lastName作为员工对象唯一标识」的需求,可以通过以下方案实现:
实现方案
- 给Employee类新增
fullName属性,实例化对象时直接拼接firstName和lastName赋值给该属性,作为对象的唯一标识 - 存储员工对象改用
HashMap<String, Employee>结构,key为拼接后的fullName,value为对应的员工对象,天然支持快速判断姓名是否重复,保证标识唯一 - 原代码中
createEmployee是实例方法,不能在静态的main方法中直接调用,需要修改为静态方法
修正后完整代码
Employee.java(单独存放的员工类)
package com.aho; public class Employee { // 存储名 private String firstName; // 存储姓 private String lastName; // 存储拼接后的全名,作为唯一标识 private String fullName; // 全参构造方法 public Employee(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; // 实例化时直接拼接生成全名 this.fullName = firstName + lastName; } // 属性的getter方法,按需添加setter public String getFullName() { return fullName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }
Main.java
package com.aho; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { // 存储所有员工的Map,key为员工全名,value为员工对象,保证姓名唯一 private static Map<String, Employee> employeeMap = new HashMap<>(); /** * 创建员工方法 * @param firstName 名 * @param lastName 姓 * @return 创建成功返回true,姓名重复返回false */ public static boolean createEmployee(String firstName, String lastName){ String fullName = firstName + lastName; // 先判断是否已存在同名员工 if(employeeMap.containsKey(fullName)){ System.out.println("创建失败:已存在姓名为【" + fullName + "】的员工"); return false; } // 实例化新员工并存入Map Employee newEmployee = new Employee(firstName, lastName); employeeMap.put(fullName, newEmployee); System.out.println("创建成功:员工【" + fullName + "】已新增"); return true; } public static void main(String[] args) { // 如果仍需要用ArrayList存储员工对象,创建成功后可自行添加 ArrayList<Employee> employeeList = new ArrayList<>(); Scanner input = new Scanner(System.in); System.out.println("请输入操作指令:"); String command = input.nextLine(); // 忽略大小写匹配指令,不用写两次判断 if(command.equalsIgnoreCase("Create new employee")){ System.out.println("\n请输入名:"); String fName = input.nextLine(); System.out.println("\n请输入姓:"); String lName = input.nextLine(); boolean createResult = createEmployee(fName,lName); // 创建成功的话,把员工对象加入ArrayList if(createResult){ employeeList.add(employeeMap.get(fName + lName)); } }else { System.out.println("Error:指令不合法"); } input.close(); } }
内容的提问来源于stack exchange,提问作者AHO
相关产品推荐
相关产品推荐

