方法重载;命名助手方法

时间:2014-06-10 17:29:58

标签: java overloading standards

我喜欢在创建函数时为public helpers创建private members。我做了public helper

public void create(String key, String value) { ... }

表示private member

private void create(String key, String value) { ... }

现在,我正在重载private member并知道我需要在Java中通过

这样做
  • 方法签名(类型或数量)

我无法通过返回类型重载。因此,我决定修改我的private member以接受布尔参数。

private void create(String key, String value, boolean status) { ... }

我承认这个参数不是我打算使用或考虑的参数。我是否因为接受糟糕的编码行为而变得自满?

public helper只调用private member传递提供的参数

public void create(String key, String value) { create(key, value, true); }

1 个答案:

答案 0 :(得分:0)

虽然辅助类可能是一个快速解决方案,但您仍然将实现耦合到您正在公开的类(“调用者”类)。创建接口是为了创建您打算创建的抽象(即从公共视图隐藏私有实现),但增加了灵活性:

  1. 可以被其他想要拥有类似行为的类的人使用
  2. 从调用类中解除实现。
  3. 在运行时,您可以选择使用哪种实现(通过IoC或类似)
  4. 这是我的建议:

    MyObjectImpl.java - >实现MyObject.java

    private Object createObjectNotInitialized( String name ){
       return new Object();
    }
    
    private Object createObjectInitialized( String name ){
      Object newObj = new Object();
      newObj.setName( name );
      return newObj;
    }
    
    public Object createObject( String name, boolean doInit ){
      if( doInit ){
         return createObjectInitialized(name);
      }else{
         return createObjectNotInitialized(name);
      }
    }
    
    // you can chose to init objects by default - I chose not to for this example
    public Object createObject( String name ){
         return createObjectNotInitialized(name);
    }
    

    MyObject.java - >接口

    Object createObject( String name, boolean doInit );
    Object createObject( String name );
    

    Caller.java 调用类

    MyObject myObj = new MyObjectImpl();
    Object o = myObj.createObject( "Hello" );