Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法重载;命名助手方法_Java_Overloading_Standards - Fatal编程技术网

Java 方法重载;命名助手方法

Java 方法重载;命名助手方法,java,overloading,standards,Java,Overloading,Standards,我喜欢在创建函数时为私人成员创建公共助手。我做了一名公共助理 私人会员 现在,我正在重载私有成员,并且知道我需要在Java中通过 方法签名类型或数量 我无法按返回类型重载。因此,我决定修改我的私有成员以接受布尔参数 private void create(String key, String value, boolean status) { ... } 我承认这个参数不是我计划使用或考虑的。我是否已经满足于接受糟糕的编码行为 公共助手只调用传递提供的参数的私有成员 public void cr

我喜欢在创建函数时为私人成员创建公共助手。我做了一名公共助理

私人会员

现在,我正在重载私有成员,并且知道我需要在Java中通过

方法签名类型或数量 我无法按返回类型重载。因此,我决定修改我的私有成员以接受布尔参数

private void create(String key, String value, boolean status) { ... }
我承认这个参数不是我计划使用或考虑的。我是否已经满足于接受糟糕的编码行为

公共助手只调用传递提供的参数的私有成员

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

虽然helper类可能是一个快速的解决方案,但您仍然将实现与公开调用方类的类相耦合。创建接口是为了创建您想要创建的抽象,即从公共视图隐藏私有实现,但增加了灵活性:

可以被其他想要拥有类似行为的自己实现的类使用 将实现与调用类解耦。 在运行时,您可以通过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" );

我不知道你想做什么,你能分享完整的代码吗?你想超载什么?私人会员的公共助手?这不是反过来吗?两种创建方法都有相同的逻辑吗?如果它们在逻辑上不同,为什么不使用不同的名称来反映它们的不同行为呢?使用接口怎么样?默认情况下,公开的方法是公共的,私有的方法可以保持私有的。如果一个方法只调用另一个方法,那又有什么意义呢?如果你能做到这一点,除了增加另一个方法调用的开销,直到它被优化为止,你将做与使私有方法公开完全相同的事情。您没有以任何方式改进封装或抽象。要回答这个问题,是的,添加一个不允许重写同名方法的参数是不好的。如果你真的想这样做,使用不同的名字会更好。例如@AmirAfghani的建议,或者一些人使用像_create这样的东西
Object createObject( String name, boolean doInit );
Object createObject( String name );
MyObject myObj = new MyObjectImpl();
Object o = myObj.createObject( "Hello" );