例如,如果我有类似的功能
public List sort(ArrayList list) {...}
我的同学告诉我,我们应该使用List作为返回类型,因为返回类型应该尽可能广泛.他的理由是,如果我们当前返回一个ArrayList,我们可以更改为返回LinkedList或其他类型.它增加了灵活性.
但是我们收到的函数参数应尽可能窄.这是因为我们可能需要在sort函数中使用一些只由ArrayList实现的函数.
所以我的问题是:是否有任何广泛接受的指南/最佳实践建议函数的形式参数应尽可能窄?如果不是,反对的主要论点是什么?
=============================================
只是为了澄清这一点.
public List sort(ArrayList list) {...}
这只是一个例子,List和ArrayList可以被任何其他Super Class和SubClass替换.我们假设SubClass中只存在一些函数.
public SuperClass sort(SubClass object) {...}
解决方法:
大多数程序员都会同意,尽可能广泛的回报是你所描述的好事(由于灵活性因素).
我相信很多人会争辩说,尽可能广泛的指南也适用于参数,因为它允许从更广泛的范围使用你的函数:如果在代码中的某个地方有一个LinkedList对象,那个地方就能够调用你的方法(如果它需要排序)如果它是用List类型的参数定义的,但是如果它是用ArrayList类型的参数定义的话,它将无法调用你的方法.
所以一般来说,尽可能广泛是一个很好的指导方针.当然,由您(作为方法的作者)决定“尽可能广泛”对您来说意味着什么.具体来说,如果你可以使它更广泛但有一些成本(例如,更复杂的实现),你必须决定是否愿意接受这种额外的复杂性(更高的错误机会)以换取更广泛的适用性.
标签:java,arraylist,inheritance,generics,list
来源: https://codeday.me/bug/20190522/1153184.html