如何重构这段Java类代码?Java新手寻求最佳实践建议
重构建议与代码优化方案
1. 数据结构优化
原数组交替存储网站名称和URL的设计易引发索引越界问题,也不符合面向对象思想。推荐两种更合理的实现方式:
- HashMap映射:直接关联网站名称与URL,查找效率可达O(1)
- 自定义实体类:封装网站名称和URL属性,更贴合OOP设计规范
2. 输入逻辑封装
将Scanner输入逻辑封装到独立类,解决输入获取的封装问题:
import java.util.Scanner; public class InputHandler { public String getUserInput(String prompt) { Scanner scanner = new Scanner(System.in); System.out.println(prompt); String input = scanner.nextLine().trim(); scanner.close(); return input; } }
3. 搜索逻辑抽离
把搜索逻辑单独抽成独立方法/类,避免main方法臃肿,同时解决原数组属性访问问题:
基于HashMap的搜索实现
import java.util.HashMap; import java.util.Map; public class WebsiteSearcher { // 初始化网站数据 private static final Map<String, String> WEBSITE_DATA = new HashMap<>(); static { WEBSITE_DATA.put("Google", "http://www.google.com"); WEBSITE_DATA.put("Facebook", "http://www.facebook.com"); WEBSITE_DATA.put("Ebay", "http://www.ebay.com"); WEBSITE_DATA.put("Netflix", "http://www.netflix.com"); } public void search(String query) { if (WEBSITE_DATA.containsKey(query)) { System.out.println("找到匹配结果:"); System.out.println("网站名称:" + query); System.out.println("网站URL:" + WEBSITE_DATA.get(query)); } else { System.out.println("未找到匹配的网站"); } } }
4. 完整重构代码
public class Main { public static void main(String[] args) { // 获取用户输入 InputHandler inputHandler = new InputHandler(); String userQuery = inputHandler.getUserInput("请输入要搜索的网站名称"); // 执行搜索 WebsiteSearcher searcher = new WebsiteSearcher(); searcher.search(userQuery); } }
5. 额外优化点
- 大小写兼容:若需不区分大小写搜索,可将查询字符串与Map的key统一转为小写后对比
- 空输入处理:添加输入为空的判断逻辑,避免无效搜索
- 资源管理:Scanner使用后调用
close()方法,避免资源泄漏
内容的提问来源于stack exchange,提问作者onaikepo
相关产品推荐
相关产品推荐

