什么时候应该封装泛型类型?

2023-11-25

我见过很多人建议您应该使用更接近您的领域的类来封装泛型类型,例如 Steve 和 Nat 建议在以测试为指导不断发展面向对象的软件 that:

我们的经验法则是,我们尝试限制使用泛型传递类型[...]。特别是当应用于集合时,我们将其视为一种重复形式。这暗示有一个领域概念应该被提取到一个类型中。

一般来说,什么时候做这样的事情是个好主意..

class PersonList : List<Person>

..而不仅仅是使用List<Person>直接地?


您正在寻找的是typedefJava 或 C# 的运算符。

不幸的是,子类化方法并不能很好地替代typedef.

下面的文章《Java 理论与实践:伪 typedef 反模式》详细解释了原因。

我将把那篇文章的结论逐字复制在这里:

伪 typedef 反模式的动机很简单 足够了——开发人员想要一种定义更紧凑类型的方法 标识符,特别是当泛型使类型标识符更 冗长。问题是这个习惯用法在之间造成了紧密耦合 使用它的代码以及该代码的客户端,从而抑制重用。你 可能不喜欢泛型类型标识符的冗长,但这就是 不是解决问题的方法。

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

什么时候应该封装泛型类型? 的相关文章

  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 为什么数组不符合 Equatable,而它的项在 Swift 中是 Equatable?

    UPDATE 从 Xcode 9 3 开始 包括斯威夫特 4 1 数组相等按预期工作 并且原始问题中的代码编译没有错误 然而 请查看已接受的答案 因为它提供了更好 更现代的解决方案 原问题如下 当我尝试声明类型为泛型枚举的实例时 Post
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • MSBuild 将动态生成的文件复制为项目依赖项的一部分

    我有一个自定义 msbuild 任务 它正在生成一些输出文件到 ProjectA 的输出目录 TargetDir 当前的代码是这样的
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 优雅地避免 Java 中的 NullPointerException

    考虑这一行 if object getAttribute someAttr equals true 显然这一行是一个潜在的错误 属性可能是null我们会得到一个NullPointerException 因此我们需要将其重构为以下两个选择之一
  • 那里有更好的 DateTime.Parse 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道有一个库 付费或免费 能够处理比 DateTime Parse 使用的更常见的日期时间格式 能够
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List
  • 如何定义 Swagger UI 参数的默认值?

    我已将 Swagger Swashbuckle 集成到 NET Core 2 2 API 项目中 一切都很好 我的要求纯粹是为了方便 考虑以下 API 方法 public Model SomeEstimate SomeRequest req
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • SWT StyledText 有高度限制吗?

    我正在尝试创建一个应用程序 其中包含在 ScrolledComposite 中显示的 StyledText 框 我在 StyledText 框中显示大量行时遇到困难 超过 2 550 行似乎会导致问题 StyledText 框本身不能有滚动
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • 更改预处理到文件后出现错误 1 ​​错误 LNK1104

    我必须使用预处理器 所以我改变了 配置属性 gt C gt 预处理器 gt 预处理为文件 gt 是 并得到错误 错误 1 错误 LNK1104 无法打开文件 Debug asnreal obj 这个问题的解决办法 我必须在 lib 文件的路
  • 访问 Visual Studio 扩展中的当前代码窗格

    我正在编写一个 Visual Studio 2010 扩展 在代码视图中带有右键单击菜单 我希望能够从菜单项事件处理程序检查当前代码 但无法在对象模型中找到执行此操作的位置 如何在 Visual Studio 扩展中访问当前窗口中的代码 E
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • Spring Boot 2 中的 401 代替 403

    With 春季启动 https projects spring io spring boot 1 5 6 发布我能够发送 HTTP 状态代码401代替403如中所述如果请求未经身份验证的uri 如何让Spring Security响应未经授
  • Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

    我正在使用 spring jdbc 模板 使用存储过程创建记录 public Long create City obj SimpleJdbcCall jdbcCall new SimpleJdbcCall getJdbcTemplate g

随机推荐

  • 为什么 pyspark 中没有数据帧的映射函数,而 Spark 等效项却有它?

    目前正在研究 PySpark 没有地图功能DataFrame 并且必须去RDD for map功能 在Scala中有一个map on DataFrame 这有什么原因吗 Dataset map不属于DataFrame Dataset Row
  • QTextEdit 中的可点击超链接

    我想用QTextEdit 在只读模式下 显示可点击的超链接 我曾经这样做过 QTextEdit textEdit new QTextEdit QTextCursor cursor textEdit gt document textEdit
  • Android AppCompat 修订版 21 强制 Holo 主题

    在我的项目中 我使用的是 appcompat v7 修订版 20 并且我的项目针对 android API 级别 19 KitKat 因此我可以使用 Holo 主题 我不小心将 Android 支持库 更新为修订版 21 因此我必须将清单中
  • 如果内部的总工作量相同,则将一个 for 循环拆分为多个 for 循环的开销是多少? [复制]

    这个问题在这里已经有答案了 拆分的开销是多少for 像这样循环 int i for i 0 i lt exchanges i some code some more code even more code 分成多个for 像这样循环 int
  • 如何根据多个条件并使用 linq 从通用列表中删除项目

    我有两个列表 一个包含 url 另一个包含所有 MIME 文件扩展名 我想从第一个列表中删除所有指向此类文件的 url 示例代码 List
  • 如何制作自定义分享按钮

    我一直想在我的应用程序中添加 Facebook 共享按钮 但我遇到的问题是它们看起来都不同 我看到类似的网站this具有定制设计的共享按钮 有谁知道一个好的教程 或者有任何关于如何解决这个问题的指示 在 Facebook 上分享内容非常简单
  • html2canvas可以在页面中渲染svg吗?

    我正在使用 html2canvas 创建包含 SVG 的 HTML 页面的 屏幕截图 除了元素之外 一切看起来都不错 我知道应该可以在 Canvas 中渲染 SVG PhantomJS fabric js 和 CanVG 可以做到这一点 这
  • 如何调整文本(字体)大小以适合 UISegmentedControl 的 UISegment?

    有什么方法可以减小可以适合单段的字体大小UISegmentedControl 尝试过很多类似的事情 UILabel appearanceWhenContainedIn UISegmentedControl class nil adjusts
  • 文本上透明删除线

    我需要实施一个使用 CSS 在文本上添加透明删除线所以我不必更换 h1 标记为 img 标签 我已经设法用 CSS 在文本上实现换行 但无法使其透明 想要的效果 我拥有的 body background url http lorempixe
  • OpenCV 将 Canny 边缘转换为轮廓

    我有一个 OpenCV 应用程序 由办公室内部的网络摄像头流 很多细节 提供 我必须在其中找到人工标记 标记是白色背景上的黑色方块 我使用 Canny 查找边缘 使用 cvFindContours 进行轮廓绘制 然后使用 approxPol
  • Swift 3 中的dispatch_once 去哪儿了?

    好的 所以我发现了新的Swifty 调度 API在 Xcode 8 中 我使用起来很有趣DispatchQueue main async 我一直在浏览DispatchXcode 中的模块来查找所有新的 API 但我也用dispatch on
  • 如何以比使用 strip_tags 函数更安全的方式去除标签?

    当字符串包含 小于 和 大于 符号时 我在使用 strip tags PHP 函数时遇到一些问题 例如 If I do strip tags span some text lt 5ml and then gt 10ml some text
  • 有没有一种方法可以使用宏来检测是否包含标准标头?

    我想做一个相当于boost swap在我的环境中 可以或不可以包含标准标头 取决于项目许可和其他内容 我想让部分代码受到警卫检测器的保护 让我们考虑一个编译单元 项目特定的 前述的潜力包括 include
  • 如何从Python命令行接收正则表达式

    我想从命令行接收像 t 制表符 这样的分隔符 并用它来解析文本文件 如果我把 delimiter sys argv 1 在代码中 然后从命令行输入 python mycode py t 分隔符是 t 即 Python 会按原样保留输入字符串
  • python中接受所有泰文字符和英文字母的正则表达式

    我需要对泰语文本文档进行矢量化 例如 Bag of Words doc2vec 首先 我想检查每个文档 省略除泰语字符和英语单词之外的所有内容 例如 没有标点符号 没有数字 除了撇号之外没有其他特殊字符 对于英文文档 我使用这个正则表达式
  • C const 的默认类型是什么?

    我正在编写一些 C 代码 并注意到我认为是错误的地方 但事实并非如此 我有以下类型声明语句 const fee 然而 它最初没有被捕获 因为编译器和我没有捕获它 所以我很好奇为什么 C 允许这样做以及默认类型是什么 只有原始版本的 C 语言
  • 字节序是否只影响数字的内存布局,而不影响字符串?

    是否真的 无论架构是大端还是小端 只是数字的内存布局不同 字符串的内存布局是相同的 如果您有一个简单的 8 位字符表示 例如扩展 ASCII 那么不会 字节顺序不会影响布局 因为每个字符都是一个字节 如果您有多字节表示形式 例如 UTF 1
  • 谷歌地图两个圆的交点

    有没有一种简单的方法可以获得lat lng两个的交点 如果有 circles in 谷歌地图 API V3 或者我应该去hard way EDIT 在我的问题中 圆总是具有相同的半径 这样可以使解决方案更容易 是的 对于相等的圆 可以阐述相
  • 使用 Firebase 身份验证的 SwiftUI

    我正在尝试通过电子邮件 密码登录使用 SwiftUI Firebase 身份验证 我的问题是 有什么方法可以在用户创建帐户时将个人资料信息附加到用户的身份验证信息中 或者我必须将 Firebase Auth 与 Firestore 或 Fi
  • 什么时候应该封装泛型类型?

    我见过很多人建议您应该使用更接近您的领域的类来封装泛型类型 例如 Steve 和 Nat 建议在以测试为指导不断发展面向对象的软件 that 我们的经验法则是 我们尝试限制使用泛型传递类型 特别是当应用于集合时 我们将其视为一种重复形式 这