问题标签 [companion-object]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3264 浏览

scala - 私有类的伴生对象:为什么它无效?

我需要两个可以访问彼此私人的实例。我自然想到了一个伴生对象,它允许访问它的伴生类的唯一实例。我将类本身设为私有,因此用户不能只使用new.

此代码无法编译。我明白了:A 类作为 A 类错误的一部分逃脱了它的定义范围,我不太明白。我目前的解决方法是在类应该具有的每个方法声明中定义一个特征,并class A扩展该特征,而dual是特征类型,而不是class A类型。

我在这里缺少什么理论问题?为什么这是禁止的?

0 投票
1 回答
116 浏览

scala - 扩展用户定义的高级类型

我在 scala 中有一个更高种类的用户定义别名:

我也有这种类型的值:

要编写可读的代码,我想定义(例如)一个方法,如

它将 FutureOfLastError 的实例映射到 Future[String] 并将其称为

我怎样才能做到这一点?甚至可能吗?我已经尝试过封装在一个案例类中,我想到了各种隐式转换。

我最喜欢的选择是类型别名上的伴生对象,但我无法让它工作,因为我无法从伴生对象调用特征 Future 的方法(如 map 等)。

0 投票
1 回答
149 浏览

scala - 由相关类的超特征绑定的列表中的伴随对象

我正在尝试将伴随对象的“注册表”放在一起 - 通过将它们存储在使用泛型绑定的列表中。

一个例子是最好的:

FooLookup "def allFoos" 上报告的错误是

  • 类型不匹配; 发现:A.type 要求:Foo.type

HasFoos.allFoos 需要看起来像什么,或者 List(A,B,C) 需要看起来像什么。

我也试过def allFoos: List[ _ <: Foo]了;但是它也会出错,而且,我确实想使用“伴随对象”而不是类 - 我确信我需要一些更通用的糖粉,但不确定它需要什么。

提前致谢。

0 投票
1 回答
671 浏览

java - Scala 一个具有可变状态的单例对象在 servlet 容器环境中是否具有与 Java 静态相同的行为?

不完全确定如何表达这个问题。在 java 中,如果您有一个静态实例 var 并且所属类位于 tomcat/classes 或 tomcat/lib 中,以便许多不同的 Web 应用程序(tomcat 类加载器的子级)可以使用它,则在一个 Web 应用程序中更改静态 var 会影响其他。

Scala 伴生对象也是如此吗?据我了解,Scala 单例对象是编译器创建的由静态变量引用的单例 Java 类。所以答案是肯定的。如果 web 应用 A 创建了一个新的 scala Foo 并且 web 应用 B 创建了一个新的 scala Foo 并且 Foo 类来自一个父类加载器,那么每个 web 应用都会有它自己的 Foo 实例,但实际上只有一个 Foo 的伴生对象的实例。

我在这里错过了什么吗?

提前感谢您的任何见解。

0 投票
2 回答
123 浏览

oop - 将相关字段封装到伴随对象/类中并避免重复

我的应用程序使用属性文件来加载多个属性。

应用程序的每个实例都有 3 个与环境相关的参数 - 其中一个是属性,另外两个是基于它计算的。

在我看来,应该以某种方式封装 3 个 environment* 属性。

我称之为寻求的抽象Discriminator,因为它用于区分 3(目前)环境类型。由于在一个正在运行的应用程序中,只有一组这样的 environment* 属性,因此我将其实现为object

我可以调用: environment.Discriminator.urlPrefix,这很好,但是如何改进代码?我如何摆脱重复的match
现在感觉 oftokenurlPrefixof的值live应该一起存在(就像 for等的值staging一样)——有点像作为 Discriminator 类的一个实例的一部分。

由于我仍然想使用environment.Discriminator.urlPrefix,我仍然需要Discriminator(现在)伴生对象。

但我被困在这里 - 我不知道如何结合这些概念。

我显然必须根据具体flag领域为自己创建 3 个鉴别器实例,但是如何?如何调用构造函数 - 基于第一个参数(所有实例通用)将最后两个参数传递给它?

一旦我有了这个,我如何将三个实例与鉴别器伴随对象连接起来,以便我可以使用environment.Discriminator.urlPrefix

0 投票
2 回答
4238 浏览

oop - 覆盖伴随对象值和 Scala MatchError

有人可以澄清为什么以下代码会导致 MatchError 吗?在这种情况下,MatchError 是什么意思?

鉴于这不起作用,有没有办法覆盖与此类似的伴随对象 val 或 def ?

0 投票
1 回答
1280 浏览

scala - 伴随对象作为scala中的工厂

我刚刚开始使用 Scala,并且正在编写一些教程。我遇到了伴随对象,并将它们用作工厂。我尝试了几件事。但是,我没有让以下内容正常工作。无法理解它。

只是想把两个整数点相加,就像我在方法中定义的那样......有谁知道我做错了什么?

编辑:我试图将以下(工作)类包装在工厂中。

0 投票
1 回答
609 浏览

scala - 使用 scala 类型宏从案例类访问伴随对象(反之亦然)

我正在尝试根据案例类的字段在伴随对象上创建一个值。

我想做这样的事情:

我想为此添加以向其伴随对象添加值...

因为伴生对象和类可以相互访问,我不应该通过从案例类类型宏中访问伴生对象来实现这一点吗?

另外...无论是否定义了对象A,我都想添加“val c”。

0 投票
1 回答
3706 浏览

scala - Scala:在伴生对象中获取伴生类

我需要在我的伴生对象中定义一个 val,该对象使用一个将伴生类作为参数的方法进行初始化。

我想用不重复自己的特征来处理这个问题。我的问题是,X.getClass 与 classOf[X] 不同。第一个是伴生对象的类,第二个是伴生类的类,但是我需要得到伴生类而不直接硬编码。

基本上我需要这样的东西:

问题是由于类型擦除,我无法获得泛型类型的类

0 投票
2 回答
163 浏览

scala - 最终值会增加对象大小吗?

每个Foo对象都有一个pi成员吗?因此,我应该放入pi伴随对象吗?