Java中如何使用可变名称创建对象并通过名称获取对象?
如何用动态字符串作为对象名创建并检索对象?
嘿,我来帮你理清这个问题!首先得明确:Java里没办法直接把字符串作为变量名来创建对象——变量名是编译时就确定的,没法动态用字符串生成。你写的objName = new Customer("A");这行代码本身就有问题,因为objName是String类型,不能把Customer对象赋值给它,编译器会直接报错。
那要实现“用给定字符串作为标识创建对象,之后还能通过这个字符串检索对象”的需求,最常用的方案是用Map来存储对象,把你想要的“对象名称”作为Map的键,对应的对象作为值。
具体实现步骤:
- 准备好你的
Customer类(假设你已经有了,这里给个简单示例):
class Customer { private String name; public Customer(String name) { this.name = name; } public String getName() { return name; } }
- 使用
Map<String, Customer>来管理你的对象:
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { // 创建一个Map,用来存储"对象名称"和对应Customer对象的映射 Map<String, Customer> customerMap = new HashMap<>(); String objName = "customerA"; // 创建Customer对象,并存入Map,用objName作为键 customerMap.put(objName, new Customer("A")); // 现在可以通过名称检索对象了 Customer targetCustomer = customerMap.get("customerA"); if (targetCustomer != null) { System.out.println(targetCustomer.getName()); // 输出:A } } }
- 如果想封装成类似
getObjByName的方法,可以把Map放到一个工具类里:
import java.util.HashMap; import java.util.Map; public class CustomerManager { // 用静态Map维护所有客户对象 private static final Map<String, Customer> customerStore = new HashMap<>(); // 添加客户对象的方法 public static void addCustomer(String identifier, Customer customer) { customerStore.put(identifier, customer); } // 通过名称检索客户的方法 public static Customer getObjByName(String identifier) { return customerStore.get(identifier); } }
使用这个工具类的代码:
public class Main { public static void main(String[] args) { String objName = "customerA"; CustomerManager.addCustomer(objName, new Customer("A")); // 调用你想要的getObjByName方法 Customer customer = CustomerManager.getObjByName("customerA"); if (customer != null) { System.out.println(customer.getName()); // 输出:A } } }
注意事项:
- 记得做非空判断:
Map.get()方法如果找不到对应的键会返回null,直接调用方法可能会抛出NullPointerException。 - 如果是多线程环境,建议使用线程安全的Map实现,比如
ConcurrentHashMap,避免并发问题。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

