Java方法返回多个对象的封装技巧与实例
(挠头)刚学Java那会儿,我总在想:一个方法只能return一个值?那我要返回用户名和年龄怎么办?难道要写两个方法?这和短视频新手如何快速涨粉遇到的第一个困惑一样——平台规则都没摸清,怎么玩得转?
上周还有个实习生问我:"哥,我查数据库既要返回用户信息又要返回分页数据,总不能把数据库连接暴露出去吧?" 今天咱们就聊聊这个让新手抓狂的问题——??如何优雅地打包多个对象回家??!
一、那些年我们走过的弯路
??错误示范1:用Object数组装货??
java复制public Object[] getUserInfo() { return new Object[]{"张三", 25, "北京"}; }
(拍大腿)调用方得这么写:
java复制Object[] result = getUserInfo(); String name = (String)result[0]; // 随时可能ClassCastException
??类型转换就像开盲盒??,指不定什么时候就爆炸!
??错误示范2:玩List大杂烩??
java复制public List
(扶额)这样写虽然能跑,但三个月后你自己都记不住第2个元素是年龄还是体重...
二、老司机の正确姿势
??技巧1:专属快递盒——封装对象??
java复制public class UserDTO { private String name; private Integer age; private String address; // 构造器+getter+setter } public UserDTO getUserInfo() { return new UserDTO("张三", 25, "北京"); }
(竖大拇指)这才是正经路子!??字段含义一目了然??,调用方用起来也放心。
??技巧2:临时包裹——Pair/Triple类??
比如用Apache Commons的:
java复制public Pair
getUserBaseInfo() { return Pair.of("张三", 25); }
适合??快速测试场景??,但生产环境慎用——容易变成"神秘盒"。
??技巧3:自建元组工具箱??
java复制public class Tuple3 { public final A first; public final B second; public final C third; public Tuple3(A a, B b, C c) { this.first = a; //...省略 } }
(眨眼)这样既保证类型安全,又不用为临时需求新建类。
三、实战场景对对碰
??场景一:分页查询??
java复制// 错误做法:返回Object[2] // 正确姿势: public class PageResult
{ private List data; private Integer total; } public PageResult searchUsers() { //...查询逻辑 }
??场景二:多表联查??
(敲黑板)比如要返回用户信息+订单列表:
java复制public class UserDetailVO { private User user; private List
orders; private Statistics stats; }
比用Map
四、灵魂拷问时间
??Q:为啥不直接用Map封装???
(叹气)见过最惨的案例:某人用Map存了20个字段,半年后新同事改需求,不小心把"age"拼成"aeg",直到上线才报错...??编译期能发现的问题,不要拖到运行时!??
??Q:返回多个对象会影响性能吗???
完全多虑!对象封装的内存开销可以忽略不计。比起后期维护成本,这点损耗不值一提。
??Q:动态数量对象怎么返回???
比如根据条件返回不同组合,建议用??建造者模式??:
java复制public class ResultBuilder { private User user; private Company company; public ResultBuilder setUser(User u) { this.user = u; return this; } //...其他set方法 public Result build() { return new Result(user, company); } }
小编观点:返回多个对象就像打包行李,胡乱塞进行李箱(Object数组)虽然省事,但找东西时准抓瞎。花点时间给每件衣服(数据)准备专用收纳袋(DTO类),才是可持续发展的正道!
本文由嘻道妙招独家原创,未经允许,严禁转载