我的域中有FinanceRequests和CommisionTransactions。如果我有一个FinanceRequests列表,则每个FinanceRequest可能包含多个需要撤回的CommisionTransactions。不用担心这是怎么做到的。
下面的类(非常底层)使我感到模糊不清,因为它简洁,可以很好地重用现有代码。一个问题类型擦除。
public void clawBack(Collection<FinanceRequest> financeRequestList)
public void clawBack(Collection<CommissionTrns> commissionTrnsList)
它们在擦除后具有相同的签名,即:
Collection<FinanceRequest> --> Collection<Object>
Collection<CommissionTrns> --> Collection<Object>
因此,eclipse抱怨:
方法clawBack(Collection)具有与类型CommissionFacade中的另一个方法相同的擦除clawBack(Collection)。
有什么建议可以对其进行重组,使其仍然是可以很好地重用代码的优雅解决方案?
public class CommissionFacade
{
/********FINANCE REQUESTS****************/
public void clawBack(FinanceRequest financeRequest)
{
Collection<CommissionTrns> commTrnsList = financeRequest.getCommissionTrnsList();
this.clawBack(commTrnsList);
}
public void clawBack(Collection<FinanceRequest> financeRequestList)
{
for(FinanceRequest finReq : financeRequestList)
{
this.clawBack(finReq);
}
}
/********COMMISSION TRANSACTIOS****************/
public void clawBack(CommissionTrns commissionTrns)
{
//Do clawback for single CommissionTrns
}
public void clawBack(Collection<CommissionTrns> commissionTrnsList)
{
for(CommissionTrns commTrn : commissionTrnsList)
{
this.clawBack(commTrn);
}
}
}
重命名方法,或使用多态性:使用接口,然后将clawback代码放入对象本身,或使用两次分派(取决于您的设计范例和口味)。
使用对象中的代码将是:
public interface Clawbackable{
void clawBack()
}
public class CommissionFacade
{
public <T extends Clawbackable> void clawBack(Collection<T> objects)
{
for(T object: objects)
{
object.clawBack();
}
}
}
public class CommissionTrns implements Clawbackable {
public void clawback(){
// do clawback for commissions
}
}
public class FinanceRequest implements Clawbackable {
public void clawBack(){
// do clwaback for FinanceRequest
}
}
我更喜欢这种方法,因为我相信您的域应该包含您的逻辑;但我并不完全了解您的确切意愿,因此请您自行决定。
使用双重调度,您可以将“ ClawbackHandler”传递给clawback方法,并在处理程序上根据类型调用适当的方法。
问题内容: 假设我在课堂上说两种方法 和 那是什么感觉 重载还是重载? 问题答案: 重载是指两个或多个具有相同名称但参数不同的方法,就像您的示例一样。重载是从接口或抽象类实现一个方法的,因此超类中的方法具有实现,而子类中的方法具有不同的实现,它们仍然具有相同的方法名称和参数。
问题内容: 嗨,我只是想确保我正确理解这些概念。Java中的重载意味着您可以拥有具有不同数量的参数或不同数据类型的构造函数或方法。即 这个方法怎么样?由于它返回不同的数据类型,是否仍会被视为重载? 第二个问题是:java中有什么重载?它与继承有关吗?让我们有以下内容: 所以现在让我说以下 如果我打电话 这将返回车辆类的价格20,000 如果我打电话 这将返回卡车级别的价格14,000 我的知识
问题内容: 阅读:Joshua Bloch撰写的有效Java-第二版 第8项-在覆盖等于时遵守总合同: 程序员编写看起来像这样的equals方法,然后花很多时间迷惑它为什么不能正常工作的情况并不少见: [代码示例在这里] 问题在于此方法不会覆盖Object.equals,后者的参数类型为Object,而是将其重载。 代码样例: 我的问题: 为什么像此代码示例中那样重载的强类型equals方法不够用
重载-同一类中具有不同签名的同一方法 如果我在父类中有一个重载方法,那么子类会重载或重写这个特定的方法吗?
本文向大家介绍解析Java继承中方法的覆盖和重载,包括了解析Java继承中方法的覆盖和重载的使用技巧和注意事项,需要的朋友参考一下 方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。 如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法。 参数列
问题内容: 我有一个带有方法签名的Java函数 在我的抽象类中,我用方法覆盖了它 搭便车不起作用。这是矛盾之处吗?我认为自动装箱也适用于方法签名替代。 问题答案: 和是两种不同的类型。自动装箱模糊的程序员的方便的源代码级的区别,但不会改变的事实,他们事实上是两个 非常 不同的类型。 因此,你不能接受一个方法有一个接受一个反之亦然,副。 请注意,在声明采用而不是的方法之前,您可能应该三思而后行。这是