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

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

// 方法参数较多

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() {
    
    
        //...
    
        }
    }
    
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本