abc`1 2021-05-18 11:31 采纳率: 73.7%
浏览 85
已采纳

“方法参数多的时候,考虑封装为对象入参” 感觉有点问题

// 方法参数较多

public void test(int width, int height, int length) {

    func1(width, height, length);

    func2(width, height, length);

}

private void func1(int width, int height, int length) {
    //...
}

private void func2(int width, int height, int length) {
    //...
}

改为

// 参数封装成对象形式
public void test(Rectangle rect) {

    func1(rect);

    func2(rect);

}

private void func1(Rectangle rect) {
    int width = rect.getWidth();
    int height = rect.getHeight();
    int length = rect.getLength();
    //...
}

private void func2(Rectangle rect) {
    int width = rect.getWidth();
    int height = rect.getHeight();
    int length = rect.getLength();
    //...
}

问题来了:

参数封装成对象的形式,这样每个方法都有一段重复代码:从rect对象中获取属性

int width = rect.getWidth();
int height = rect.getHeight();
int length = rect.getLength();

还不如第一种写的代码少

 

  • 写回答

1条回答 默认 最新

  • 二当家的白帽子 后端领域优质创作者 2021-05-18 14:09
    关注

    这就是面向对象,你现在把三个参数封装成一个对象的三个属性,那你访问时自然要向这个对象去要。你觉得要着很麻烦。但是这样才保证了封装性。事实上,你的fun1,fun2也许应该是成员方法,那访问的时候就是访问自己的属性了。调用时不仅方法内部可以直接使用了,而且调用方也不需要传递参数了。甚至调用方不需要关心这个方法内部用了什么属性。如果有一天fun1,fun2改了内部实现,调用方也不用修改调用方式。

     

    public void test(Rectangle rect) {
    
     
    
        rect.func1();
    
     
    
        rect.func2();
    
     
    
    }
    
    class Rectangle {
        private int width;
        private int height;
        private int length;
    
        public void func1() {
    
        //...
    
        }
    
     
    
        public void func2() {
    
    
        //...
    
        }
    }
    
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)