加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala对象和单身人士的兴起

发布时间:2020-12-16 09:38:44 所属栏目:安全 来源:网络整理
导读:一般风格问题。 当我变得更好地编写功能代码时,我的更多方法正在变成纯粹的功能。我发现很多我的“类”(在一个容器的代码的松散的意义上)正在变得无国界。因此,我将它们作为对象而不是类,因为不需要实例化它们。 现在在Java世界中,有一个充满“静态”方
一般风格问题。

当我变得更好地编写功能代码时,我的更多方法正在变成纯粹的功能。我发现很多我的“类”(在一个容器的代码的松散的意义上)正在变得无国界。因此,我将它们作为对象而不是类,因为不需要实例化它们。

现在在Java世界中,有一个充满“静态”方法的类似乎很奇怪,通常只用于“帮助”类,就像你看到的那样,使用Guava和Commons- *等等。

所以我的问题是,在Scala世界中,在“对象”内部有很多逻辑,而不是“类”很正常,或者还有另外一个成语。

解决方法

正如你在标题中提到的,对象是单例类,而不是您在问题文本中提到的具有静态方法的类。

并且有一些事情使得scala对象比java-world中的静态和单例都更好,因此在scala中使用它们是相当“正常的”。

一方面,与静态方法不同,对象方法是多态的,因此可以轻松地将对象注入为依赖关系:

scala> trait Quack {def quack="quack"}
defined trait Quack

scala> class Duck extends Quack
defined class Duck

scala> object Quacker extends Quack {override def quack="QUAACK"}
defined module Quacker

// MakeItQuack expects something implementing Quack
scala> def MakeItQuack(q: Quack) = q.quack
MakeItQuack: (q: Quack)java.lang.String

// ...it can be a class
scala> MakeItQuack(new Duck)
res0: java.lang.String = quack

// ...or it can be an object
scala> MakeItQuack(Quacker)
res1: java.lang.String = QUAACK

这使得它们可以在没有紧密耦合的情况下使用,而不会促进全局状态(这两个问题通常归因于静止方法和单例)。

那么就有一个事实,他们把所有的样板都弄掉了,使得单身人士在java中看起来很丑陋和单一。在我看来,这是一个经常被忽视的一点,即使在java中,即使无状态,也不被用作全局状态,单例如此令人兴奋。

此外,您必须在所有java单例中重复的样板给出了类的两个职责:确保只有一个实例,并且做任何它应该做的事情。事实上,scala有一个声明性的方式来指定某事物是一个单身,可以缓解课堂和程序员的破坏单一责任原则。在斯卡拉你知道一个对象是一个单身,你可以只是说明它的作用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读