问题标签 [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.
scala - 私有类的伴生对象:为什么它无效?
我需要两个可以访问彼此私人的实例。我自然想到了一个伴生对象,它允许访问它的伴生类的唯一实例。我将类本身设为私有,因此用户不能只使用new
.
此代码无法编译。我明白了:A 类作为 A 类错误的一部分逃脱了它的定义范围,我不太明白。我目前的解决方法是在类应该具有的每个方法声明中定义一个特征,并class A
扩展该特征,而dual是特征类型,而不是class A
类型。
我在这里缺少什么理论问题?为什么这是禁止的?
scala - 扩展用户定义的高级类型
我在 scala 中有一个更高种类的用户定义别名:
我也有这种类型的值:
要编写可读的代码,我想定义(例如)一个方法,如
它将 FutureOfLastError 的实例映射到 Future[String] 并将其称为
我怎样才能做到这一点?甚至可能吗?我已经尝试过封装在一个案例类中,我想到了各种隐式转换。
我最喜欢的选择是类型别名上的伴生对象,但我无法让它工作,因为我无法从伴生对象调用特征 Future 的方法(如 map 等)。
scala - 由相关类的超特征绑定的列表中的伴随对象
我正在尝试将伴随对象的“注册表”放在一起 - 通过将它们存储在使用泛型绑定的列表中。
一个例子是最好的:
FooLookup "def allFoos" 上报告的错误是
- 类型不匹配; 发现:A.type 要求:Foo.type
HasFoos.allFoos 需要看起来像什么,或者 List(A,B,C) 需要看起来像什么。
我也试过def allFoos: List[ _ <: Foo]
了;但是它也会出错,而且,我确实想使用“伴随对象”而不是类 - 我确信我需要一些更通用的糖粉,但不确定它需要什么。
提前致谢。
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 的伴生对象的实例。
我在这里错过了什么吗?
提前感谢您的任何见解。
oop - 将相关字段封装到伴随对象/类中并避免重复
我的应用程序使用属性文件来加载多个属性。
应用程序的每个实例都有 3 个与环境相关的参数 - 其中一个是属性,另外两个是基于它计算的。
在我看来,应该以某种方式封装 3 个 environment* 属性。
我称之为寻求的抽象Discriminator
,因为它用于区分 3(目前)环境类型。由于在一个正在运行的应用程序中,只有一组这样的 environment* 属性,因此我将其实现为object
:
我可以调用: environment.Discriminator.urlPrefix
,这很好,但是如何改进代码?我如何摆脱重复的match
?
现在感觉 oftoken
和urlPrefix
of的值live
应该一起存在(就像 for等的值staging
一样)——有点像作为 Discriminator 类的一个实例的一部分。
由于我仍然想使用environment.Discriminator.urlPrefix
,我仍然需要Discriminator
(现在)伴生对象。
但我被困在这里 - 我不知道如何结合这些概念。
我显然必须根据具体flag
领域为自己创建 3 个鉴别器实例,但是如何?如何调用构造函数 - 基于第一个参数(所有实例通用)将最后两个参数传递给它?
一旦我有了这个,我如何将三个实例与鉴别器伴随对象连接起来,以便我可以使用environment.Discriminator.urlPrefix
?
oop - 覆盖伴随对象值和 Scala MatchError
有人可以澄清为什么以下代码会导致 MatchError 吗?在这种情况下,MatchError 是什么意思?
鉴于这不起作用,有没有办法覆盖与此类似的伴随对象 val 或 def ?
scala - 伴随对象作为scala中的工厂
我刚刚开始使用 Scala,并且正在编写一些教程。我遇到了伴随对象,并将它们用作工厂。我尝试了几件事。但是,我没有让以下内容正常工作。无法理解它。
只是想把两个整数点相加,就像我在方法中定义的那样......有谁知道我做错了什么?
编辑:我试图将以下(工作)类包装在工厂中。
scala - 使用 scala 类型宏从案例类访问伴随对象(反之亦然)
我正在尝试根据案例类的字段在伴随对象上创建一个值。
我想做这样的事情:
我想为此添加以向其伴随对象添加值...
因为伴生对象和类可以相互访问,我不应该通过从案例类类型宏中访问伴生对象来实现这一点吗?
另外...无论是否定义了对象A,我都想添加“val c”。
scala - Scala:在伴生对象中获取伴生类
我需要在我的伴生对象中定义一个 val,该对象使用一个将伴生类作为参数的方法进行初始化。
我想用不重复自己的特征来处理这个问题。我的问题是,X.getClass 与 classOf[X] 不同。第一个是伴生对象的类,第二个是伴生类的类,但是我需要得到伴生类而不直接硬编码。
基本上我需要这样的东西:
问题是由于类型擦除,我无法获得泛型类型的类
scala - 最终值会增加对象大小吗?
每个Foo
对象都有一个pi
成员吗?因此,我应该放入pi
伴随对象吗?