【问题标题】:Method Overloading; Naming Helper Method方法重载;命名辅助方法
【发布时间】:2014-06-10 17:29:57
【问题描述】:

我喜欢在创建函数时为private members 创建public helpers。我做了一个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); }

【问题讨论】:

  • 不确定我是否理解你想要做什么,你能分享完整的代码吗?你想超载什么?
  • “私人会员”的“公共助手”?不是反过来吗?
  • 两种“创建”方法是否具有相同的逻辑?如果它们在逻辑上不同,为什么不使用反映它们不同行为的不同名称?
  • 使用接口怎么样?公开的方法默认是公开的,而私有方法可以保持私有
  • 如果一种方法只调用另一种方法,那有什么意义呢?如果你能做到这一点,你将做与公开私有方法完全相同的事情(除了增加另一个方法调用的开销,直到它被优化)。您没有以任何方式改进封装或抽象。为了回答这个问题,是的,添加一个仅允许您覆盖同名方法的参数将是不好的。如果您真的想这样做,使用不同的名称会更好。例如。 @AmirAfghani 的建议,或者有些人使用 _create 之类的东西

标签: java overloading standards


【解决方案1】:

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

  1. 可以由希望拥有自己的类似行为实现的其他类使用
  2. 将实现与调用类分离。
  3. 在运行时,您可以选择使用哪个实现(通过 IoC 或类似方式)

这是我的建议:

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" );

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2014-05-03
    • 2012-12-30
    • 2016-07-22
    相关资源
    最近更新 更多