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