我有类似以下代码(我简化了它):
trait A {
val CONST_VALUE = 10
}
class B(someValue: Int, values: Array[Int]) extends A {
//some methods
}
object B {
def apply(someValue: Int) = B(someValue, Array.ofDim[Array[Byte]](someValue).map(block => Array.fill[Byte](A.CONST_VALUE)(0)))
}
Run Code Online (Sandbox Code Playgroud)
CONST_VALUE基本上,我在 Trait 中声明了一个常量A。我试图在伴生对象中使用它B来实例化该类B。但是,我无法A.CONST_VALUE从伴随对象访问B。(我收到编译错误)。
那么我该怎么做呢?
你不能这样做。
首先,object B是 的伴生对象class B,而不是trait A。同伴需要具有相同的名称并在同一编译单元中定义。
其次,CONST_VALUE是 的实例字段trait A。它是实例的成员A,而不是 的成员A。
第三,当你说你基本上是在A.CONST_VALUE调用. 但您只能调用对象/值的方法。不是一个对象,它是一个类型,类型和值存在于不同的世界,你不能混合两者。CONST_VALUEAA
第四, your 的CONSTANT_VALUE命名具有误导性:只有final vals 是常量值定义,因此 yourCONSTANT_VALUE实际上并不是常量值。
第五,您的apply方法调用自身(B()是 的语法糖B.apply()),因此需要返回类型注释。
第六,您的apply方法使用两个参数调用自身,但它仅使用一个参数定义。
第七,您创建了一个Array[Array[Byte]],但我不清楚您为什么要这样做以及您需要它做什么。
这是一大堆问题(特别是考虑到一开始只有几行代码),您需要逐一修复。这是一种可能的部分解决方案,但我不清楚您到底想要实现什么。
trait A
object A {
final val CONST_VALUE = 10
}
class B(someValue: Int, values: Array[Int]) extends A {
//some methods
}
object B {
def apply(someValue: Int): B = new B(
someValue,
Array.ofDim[Array[Byte]](someValue).map(block => Array.fill[Byte](A.CONST_VALUE)(0)))
}
Run Code Online (Sandbox Code Playgroud)