在Java中传递对对象的引用还是传递对象中的单个属性更好?

2022-09-02 19:21:26

我正在处理遗留代码,我经常看到来自同一对象的多个属性的方法调用被传递到一个方法中:

update(user.getID(), user.getLanguage() etc...)

这样做是否有明显的优点或缺点,或者我是否也可以传入用户对象(在本例中)并处理调用的方法中的属性?

跟进:

很多优秀的答案,谢谢。对于问题中缺乏确切的细节表示歉意,但正如我所说,这在我正在研究的整个系统中都可以看到,这似乎是一个很好的简单示例。请随时将这个问题变成一个社区wiki问题,因为没有一个答案可以比其他答案被接受,因为它们都很好并且有有效的积分。


答案 1

两者都有其优势。我会根据每种方法应该做什么来决定。但是,对于遗留代码,除非确实存在问题,否则我宁愿不更改任何内容。

赞成几个值,反对对象参考:

  • 您没有绑定到特定类,您可以从其他来源传递值
  • 方法不能(意外地)更改对象状态(C++可以使用“const”)

Pro 传递单个用户对象:

  • 您绑定到用户对象,使得很难意外传递不相关/无效的值
  • 很明显,该方法需要用户对象的数据
  • 更改(例如重命名)getter需要更改方法的所有调用,而不仅仅是在其实现中
  • 如果添加了新属性并需要传递,则类似
  • 方法可以更改对象状态

如您所见,根据您的需求,房产可以被视为优势或劣势。


答案 2

事实上,传递对对象的引用要好得多,原因有两个:

  • 它避免了在调用该方法的每个位置重复所有 getter(DRY 原则)
  • 它会导致更短的方法签名。方法几乎不应该有超过三个参数,因为它太容易混淆顺序,并且难以重构。

为了避免参数列表过长,建议的重构是创建一个包含所有数据的对象 - 你已经有了这样一个对象,你不是很幸运吗?