如何从JFrame表单创建多个对象?优化现有冗余代码
优化JFrame表单中多对象创建的冗余代码
我太懂你这种被一堆if-else支配的痛苦了——这段代码不仅写起来麻烦,以后要加更多用户的话简直是灾难。咱们用集合来重构一下,瞬间就能让代码清爽起来!
首先先指出你当前代码里的两个小问题:
- 字符串比较别用
==,要用equals(),==比较的是对象引用,不是字符串内容,很容易出bug UserTypeBoxSet.toString()大概率不是获取下拉框选中值的正确方式,应该用UserTypeBoxSet.getSelectedItem().toString()(假设这是个JComboBox)
接下来是优化方案:我们可以用一个Map<String, User>来存储所有用户对象,把"user1"、"user2"这类字符串作为key,对应的User对象作为value。这样就不用挨个写if-else判断了,直接通过选中的key从Map里取对象就行。
第一步:初始化用户Map
在你的类里先定义一个Map,把现有的user1到user10放进去:
// 假设你的用户类叫User,先定义成员变量 private Map<String, User> userMap = new HashMap<>(); // 在初始化方法(比如构造函数)里把用户对象放进Map public YourFrameClass() { // 先初始化user1到user10 user1 = new User(); user2 = new User(); // ... 以此类推初始化user3到user10 // 把用户对象存入Map userMap.put("user1", user1); userMap.put("user2", user2); userMap.put("user3", user3); // ... 直到user10 }
第二步:重构CreateAccount方法
现在你的CreateAccount方法就能简化成几行代码:
private void CreateAccount() { String selected = UserSelectList.getSelectedValue(); String setName = nameTboxSet.getText(); // 修正下拉框取值方式 String setType = UserTypeBoxSet.getSelectedItem().toString(); // 先判断选中的key是否存在于Map中 if (selected != null && userMap.containsKey(selected)) { User targetUser = userMap.get(selected); targetUser.setName(setName); targetUser.setUserType(setType); } else { // 可选:处理选中无效值的情况,比如弹出提示 JOptionPane.showMessageDialog(this, "选中的用户不存在!"); } }
为什么这么做更好?
- 扩展性强:以后要加user11、user12,只需要往Map里多put一个键值对就行,不用再加一堆if-else
- 代码更简洁:去掉了冗余的分支判断,逻辑一目了然
- 维护方便:如果要修改用户对象的操作,只需要改一处逻辑,不用挨个改if-else里的代码
另外再提醒一下:如果UserSelectList是个JList,getSelectedValue()返回的是Object类型,最好先转成String再用;如果是JComboBox的话用getSelectedItem()更合适,根据你的组件类型调整就行。
内容的提问来源于stack exchange,提问作者Jurdun
相关产品推荐
相关产品推荐

