在创建一个方法的时候,有时候会遇见这样的情况,比如 方法 setEnabled ,字面意思是可用,或者启用;但是往往会加一个参数 bool 来判断 是否启用;这里我一直以为是多此一举


在创建一个方法的时候,有时候会遇见这样的情况,比如 方法 setEnabled ,字面意思是可用,或者启用

public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f)
{
   ...
   return f;
}

但是往往会加一个参数 bool 来判断 是否启用

public static CheckBoxListExtension setEnabled(this CheckBoxListExtension f,bool isEnabled)
{
   if(isEnabled)
   {
       ...
   }
   return f;
}

这里我一直以为是多此一举,既然 setEnabled 本身就是设置启用,那为什么还要传一个bool呢,在调用时 checkbox1.setEnabled(false);并没有什么意义,如果传false,我直接把这行注释掉就可以了,即使 需要判断 那我写成

if(isEnabled) checkbox1.setEnabled();

也可以,难道就为了省下一个 if 么?


其实就是为了省一个if


其实这里的使用场景就是满足 链式调用(瀑布式调用) 或者高大上叫 FluentAPI 设计模式

像这样

checkbox1.setText("").setEnabled().setValue("").SelectOnly();

这时如果setEnabled没有接参 而需要if判断时,代码就断开了

checkbox1.setText("");
if(isEnabled) checkbox1.setEnabled()
checkbox1.setValue("");
if(isSelectOnly) checkbox1.SelectOnly();

为了提高可读性可维护性 所以使用接参的写法

checkbox1.setText("").setEnabled(isEnabled).setValue("").SelectOnly(isSelectOnly);

所以大家在写这种自引用方法的时候,应该根据场景增加参数,让方法本身失去意义