我有一个带有以下签名的方法:foo(Sample sample,Aliquot aliquot)
“foo”需要改变Sample对象,可以是第一个参数,也可以是第二个参数,它可以提取Sample。例如:
foo (Sample sample, Aliquot aliquot) {
Sample out = null;
if (sample != null)
out = sample
else
out = aliquot.getSample()
return out;
}
但是这非常优雅,除了阅读API之外,开发人员不知道第一个参数的引用会覆盖第二个参数的Sample。
现在,我可以将“foo”更改为foo(SomeMagicalObject栏),其中SomeMagicalObject是Sample和Aliquot的元组并保存一些逻辑......等等。
但我想知道,这个问题是否有一些模式?
答案 0 :(得分:2)
我要么将其更改为foo(Sample sample)
,并使调用者在Sample对象中传递,或者将其更改为foo(Aliquot aliquot)
,并使调用者在Aliquot上设置Sample。
你是对的,如果你允许两种方式,那么调用者就需要哪一种方式会很困惑。删除未知并强制调用者以这样或那样的方式进行操作。
答案 1 :(得分:0)
sample.foo( aliquot );
答案 2 :(得分:0)
取决于更大的图片是什么,但是如果你不控制Sample对象,你总是可以在没有方法的情况下这样做:
样本foo =(样本!= null)? sample:aliquot.getSample();