【发布时间】:2012-04-20 18:08:51
【问题描述】:
我有一个特殊的对象,它包含一个对象列表和列表的一堆附带属性。
我有一个函数可以将项目注入我的特殊对象的列表部分。该函数取决于列表附带的属性,因此我选择创建一个新对象,该对象同时包含属性和列表。
问题 1:谁负责在函数开始注入项目之前确保 List 不为空?
调用者是否应该创建一个新列表并将其传递给函数?
被调用者是否应该创建一个新列表并将其分配给对象,而不考虑传入的对象的状态?
是否应该将函数设计为在不修改对象的情况下接收对象并返回一个新列表,让调用者将返回的列表分配给它的特殊对象?
或者...还有其他我没有考虑过的选项吗?
相关问题 2:鉴于我的设计需要 List 附带的属性,我应该选择创建一个包含属性和 List 的新类,还是应该创建一个包含附加属性的 List 子类?
【问题讨论】:
-
我会说这是一个习惯问题,例如我总是返回一个新对象。调用者可以只做
MyObject obj = null; obj = MyFunc();甚至像MyObject obj = MyFunc();那样直接初始化它如果您希望调用者能够修改对象(或您的情况下的数组),您可以返回对象(或数组)的实例。否则,您可以执行复制并返回新对象(或实例的只读集合)。 -
我很好奇是什么促使您将此添加为评论而不是可能的答案?我是 SO 的新手,如果确实是一个,我相信我不能将您的评论标记为答案(在我评估了其他潜在答案之后)。
-
你是对的,但你的问题没有“正确”的答案,它看起来更像是一个讨论问题。