构造函数应该接受参数还是应该创建 setter?

2024-03-27

我有两个选择。要么创建一个在其构造函数中接受大量参数的类,要么创建大量 setter 方法和 init 方法。我不确定哪个是首选选项,构造函数中是否应该接受某些参数,而其他参数可以通过 setter 手动设置?还是我想太多了?

这是一个相关的问题,也是我提出的:成员名称和构造函数参数名称之间的冲突 https://stackoverflow.com/questions/12822975/how-to-deal-with-constructor-argument-names.


如果创建对象后必须调用set or init实际使用它......好吧,这只是一个糟糕的设计。

如果对象在某些成员未按照您希望的方式初始化的情况下可用,则可以稍后设置它们。

这里的黄金法则是——如果您创建一个对象,您应该能够使用它而无需进行任何其他类型的初始化.

扩展答案:

假设您有一个具有 10 个边、10 个角、一种颜色和一个名称的形状,可以将其连接到另一个不同的形状。构造函数应该如下所示:

 MyShape(Point c1, Point c2,...., Point c10, Color c, Name n)

正如您所看到的,我省略了连接的形状,因为它可以明智地设置为NULL如果当前对象未连接。但是,在没有任何其他参数的情况下,该对象无效,因此应在构造函数中设置它们。

可能的重载(或者默认参数)可以是:

 MyShape(Point c1, Point c2,...., Point c10, Color c, Name n, 
                                      MyShape* connectedShape /*=NULL*/)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构造函数应该接受参数还是应该创建 setter? 的相关文章

随机推荐

  • 使用 SQL Server 2012 恢复多个数据库的最佳脚本?

    我必须恢复大约 60 个不同大小的 SQL 数据库 我在谷歌上搜索找到一个脚本来依次恢复所有数据库 只需从我的文件夹中一一挑选它 我没有那么成功 可能是因为我对 SQL 等还很陌生 它可以在 powershell 或 sql 命令行中完成
  • 无法使用处理程序解决 CalledFromWrongThreadException

    我会尽量保持简单 在我的主要活动中 我创建了一个处理程序 public class ARViewer extends ARDisplayActivity public final MHandler mHandler new MHandler
  • Linux 发行版二进制兼容性

    有没有办法在 Linux 发行版中制作二进制文件并在具有相同架构的另一个发行版上运行它 或者我应该在不同的发行版上编译和构建它 基于 Redhat Debian 的二进制文件发行版之间是否存在兼容性 我想在 fedora 上使用我的 Ubu
  • 尝试打开工作簿时的 VBA 错误处理

    我试图循环浏览文件夹中的所有文件 打开它们并删除文档信息 我在处理无法打开的文件或打开时出现有关禁用宏的弹出消息时遇到问题 我尝试使用错误恢复下一步和错误转到 0 来解决此问题 但随后我遇到运行时失败 因为当我尝试关闭已打开的文件时 我的工
  • 管理多个 AWS 账户凭证的推荐方法?

    通过以下方式管理多个 Amazon Web Services AWS 账户的最佳方式是什么boto 我熟悉博托配置 http docs pythonboto org en latest boto config tut html文件 我正在使
  • Eclipse 使用 jboss 进行远程调试

    如何在 JBOSS 服务器 4 x 版本的 Eclipse 中配置远程调试 So far Step1 我修改了run config文件 通过取消注释以下行 用于远程套接字调试的示例 JPDA 设置 JAVA OPTS JAVA OPTS X
  • 系统更新IMG的src。内存泄漏

    系统更新IMG的src 内存泄漏 我目前每 x 秒更新一张图像 我想到的几种方法如下 拿一个 var url ImageID attr src url 现在这个作品完美地改变了形象but导致内存泄漏 取二 所以它正在创建 DOM 元素 所以
  • 相当于 JMockIt 中的 times() 吗?

    我不认为 minInspiration 或 maxInspiration 等同于 Mockito 中的 times 有没有 请看这个问题 Mockito 和 JMockIt 之间的主要区别 https stackoverflow com q
  • 如何在 Artifactory 中触发 Jenkins 在新工件上构建?

    Artifactory 可以用作 Jenkins 中的 SCM 或源来触发特定工件部署上的构建吗 在 Artifactory Jenkins 插件中没有看到 或错过 任何类似的内容描述 https www jfrog com conflue
  • 选择 count(*) 并“连接”3 个表

    我正在寻找 3 个表的联接内的计数查询 它可以让我对其中一个表的不同值进行计数 我有 3 个表 需要连接它们才能获取预期数据 Workflow Message and Message Workflow Relation 我想获取按状态 已连
  • 为什么使用 Gradle 而不是 Ant 或 Maven? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • javaScript 函数 - 为什么我的默认参数失败?

    我的 Javascript 函数导致我的控制台返回我 类型错误 样式为空 这里是片段 let style one 1 two 2 three 3 function styling style style ruleSetStock retur
  • C# 中的OptionalField 已经过时了吗?

    看来可选字段属性 http msdn microsoft com en us library system runtime serialization optionalfieldattribute aspx不再需要 如果有的话 使用 Bin
  • MongoRepository @Query 无法将字符串解析为日期

    首先 我的问题是通过 Spring MongoDb 的 MongoRepository 在 MongoDB 中搜索集合 我的对象 id ObjectId 5c78e1f447f39c2eacb229d7 lab xxx type Holid
  • 在 Accordion menu.js 文件中放置图标而不是“+”或“-”

    我正在制作手风琴菜单 我刚刚找到这个链接http jsfiddle net zM5Vj http jsfiddle net zM5Vj 和我做的手风琴菜单几乎相似 代码中 有 if this text this text else acco
  • SugarCRM:如何通过 REST API 获取帐户的所有联系人

    我正在尝试使用 v2 REST API 从 SugarCRM 获取特定帐户 我知道帐户 ID 的所有联系人 我正在发送带有以下参数的 GET 请求 input type gt JSON response type gt JSON metho
  • -fsanitize 在 GCC-6.1 中不使用 gold 链接器

    更新 2016 年 9 月 30 日 Ubuntu 版本的 gcc 6 2 Ubuntu 6 2 0 3ubuntu11 16 04 6 2 0 20160901 不再有这个问题 我使用的是 Ubuntu 版本的 gcc 6 1 1 Ubu
  • 访问 TeamCity 构建评论

    继续回答这个问题 是否可以向团队城市构建添加自由文本注释 https stackoverflow com questions 4780955 is it possible to add a free text note to a team
  • 如何在 Swift 中实现线程安全哈希表(PhoneBook)数据结构?

    我正在尝试实现一个线程安全的 PhoneBook 对象 电话簿应该能够添加一个人 并根据姓名和电话号码查找一个人 从实现的角度来看 这仅涉及两个哈希表 一个关联名称 gt 人员 另一个关联电话 gt 人员 需要注意的是我希望这个对象是线程安
  • 构造函数应该接受参数还是应该创建 setter?

    我有两个选择 要么创建一个在其构造函数中接受大量参数的类 要么创建大量 setter 方法和 init 方法 我不确定哪个是首选选项 构造函数中是否应该接受某些参数 而其他参数可以通过 setter 手动设置 还是我想太多了 这是一个相关的