准确的电话号码和 WhatsApp 号码提供商。 如果您想要电子邮件营销活动列表或短信营销活动,那么您可以联系我们的团队。 电报: @xhie1

使用 Java 泛型的自类型

在某些情况下,特别是在实现构建器模式或创建其他流畅的 API 时,方法会返回this. 该方法的返回类型可能与定义该方法的类相同——但有时这并不能解决问题!如果我们想继承方法并且它们的返回类型应该是继承类型(而不是声明类型),那么我们就运气不好了。我们需要返回类型类似于“this 的类型”,通常称为self 类型,但 Java 中没有这样的东西。或者有吗? 一些例子 在我们进一步讨论之前,让我们看一下自我类型会派上用场的一些情况。 个很好的例子就隐藏在显而易见的地方:Object::clone。通过一些黑魔法咒语,它会创建调用它的对象的副本。

除非我们在这里可以忽略异常

否则它具有以下签名请注意返回类型。为什么这么一般?假设我们有一个Person并且想要公开我们必须重写该方法以使其公开可见。但我们还必须将 真实手机号码列表 结果转换。暂时将自己从 Java 的类型系统中解放出来,我们就会明白为什么这很奇怪。除了调用该方法的同一类的实例之外,还能返回什么?建设者 另一个例子是在使用构建器模式时出现的。假设我们的Person需求是我们现在可以创建一个人,如下所示:到目前为止切都很好。 现在假设我们的系统中不仅有人员,还有员工和承包商。当然他们也是人(对吧?)所以。因为它非常适合我们,所以Person我们决定也为它们创建构建器。

电话号码清单

然后每当我们添加一个字段时

然后我们做同样的事情ContractorBuilder?Person我们都会向我们的构建器添加三个字段和三个方法?这听起来不对。 让我们尝试一种不同的方法。我们最 巴林电话号码列表 喜欢的代码重用工具是什么?对了,继承。(好吧,这是一个糟糕的笑话。但在这种情况下,我会说继承是可以的。)所以我们有并且我们withName免费获得。 但是,虽然继承withName确实返回一个EmployeeBuilder,但编译器并不知道——继承方法的返回类型被声明为。这也不好啊!假设我们EmployeeBuilder做了一些特定于员工的事情(例如withHiringDate),如果我们以错误的顺序调用,我们将无法访问这些方法:  但这需要的行数几乎与原始实现一样多。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注