方法参数过多怎么办

我们在编程或阅读前人的代码时,经常会看到多个参数的方法,有的甚至达到二十个,看得人眼花缭乱,不便于阅读和维护,而且参数很容易混淆,如两个参数类型同为short型,传递时相互颠倒,编译期间内不会提示报错,如下面这个方法:

 

   public void updateUseInfo(String name, String cardNo, String phoneNunmber,String address, String edu, short age,short sex,

   float height, float weight, Date birthday) {

  // 更新操作

 }

 

记忆术中有个“魔数之七”的说法,大多数人一次最多只能记忆7个独立的块,我们将短期记忆量控制在7个之内,将大大提高记忆效率,因此建议将方法参数控制在7个以内,在4个以内最好,但是需要传递的方法参数就那么多,该怎么办?

一种方法是将一个方法拆分成多个方法,每个方法传递少量参数,然而有时候这些参数需要同时被使用,我们也可以使用参数对象封装这些参数,如对上面方法进行改造:

 

class UserInfo {

 private String name;

 

 private String cardNo;

 

 private String phoneNunmber;

 

 private String address;

 

 private String edu;

 

 private short age;

 

 private short sex;

 

 private float height;

 

 private float weight;

 

 private Date birthday;

 

 public String getName() {

  return name;

 }

 

 public void setName(String name) {

  this.name = name;

 }

 

 public String getCardNo() {

  return cardNo;

 }

 

 public void setCardNo(String cardNo) {

  this.cardNo = cardNo;

 }

 

 public String getPhoneNunmber() {

  return phoneNunmber;

 }

 

 public void setPhoneNunmber(String phoneNunmber) {

  this.phoneNunmber = phoneNunmber;

 }

 

 public String getAddress() {

  return address;

 }

 

 public void setAddress(String address) {

  this.address = address;

 }

 

 public String getEdu() {

  return edu;

 }

 

 public void setEdu(String edu) {

  this.edu = edu;

 }

 

 public short getAge() {

  return age;

 }

 

 public void setAge(short age) {

  this.age = age;

 }

 

 public short getSex() {

  return sex;

 }

 

 public void setSex(short sex) {

  this.sex = sex;

 }

 

 public float getHeight() {

  return height;

 }

 

 public void setHeight(float height) {

  this.height = height;

 }

 

 public float getWeight() {

  return weight;

 }

 

 public void setWeight(float weight) {

  this.weight = weight;

 }

 

 public Date getBirthday() {

  return birthday;

 }

 

 public void setBirthday(Date birthday) {

  this.birthday = birthday;

 }

 

}

 

 

新方法:

 public void updateUseInfo(UserInfo uInfo) {

  // 更新操作

 }

参数对象对参数进行了封装,后期还可以往对象中添加新的相关参数,方便阅读,维护和功能扩展,但是需要花费一部分精力来设计这些对象,否则很容易被滥用。

比如你写一个方法,通过用户名称和证件号查询相关信息:

 public void queryUserRelatedInfo(UserInfo uInfo){

  //查询相关信息

}

这样写调用方不知道要往对象中设置哪些必要参数,实际上要使用这个方法,他还得进入方法内部查看实际使用了哪些参数,这个方法反而显得不够友好,如果直接改写为:

 public void queryUserRelatedInfo(String name, String cardNo){

//查询相关信息

}

这个方法虽然多了个参数,但耦合度更低,对调用方更加友好。

 

随着用户信息的扩展,有的人会偷懒往userInfo对象中添加新的属性,如fatherName,motherName,这些属性缺乏紧密的联系,对象日渐庞大,整个就是一锅大杂烩,在可读性上反而不如直接传递基本类型参数的方法,这时候,我们需要对对象内部属性进行分类,将其中紧密联系的几个属性提取出来,构造成新的对象,如针对用户地址信息可以设计Address类,针对用户家人信息可以设计一个Family类,参数对象是一把双刃剑,关键是要考察代码实际情况,不滥用,要用就要提前设计好,用得恰到好处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值