从另一个 class 访问 Companion Class 变量

Accessing Companion Class variable from another class

我真的是 scala 的新手。我正在尝试从 class 外部访问伴随 class 变量。在不创建 class.

实例的情况下,我该怎么做?

在下面的示例中,我可以从 YotascaleCostProcessing class

中访问 INTERNAL_COST_REQUESTS
package com.yotascale
class YotascaleCostProcessing extends YotascaleActorSystem{

 //companion object
 object YotascaleCostProcessing{
 val INTERNAL_COST_REQUESTS = "internal-cost-requests"
 val INTERNAL_COST_UPDATES = "internal-cost-updates"
}

def setupInfrastructure() = {
    QueueService.createQueue(YotascaleCostProcessing.INTERNAL_COST_REQUESTS)
    QueueService.createQueue(YotascaleCostProcessing.INTERNAL_COST_UPDATES)
  }
}

当我从另一个包中的另一个 class 执行 YotascaleCostProcessing.INTERNAL_COST_UPDATES 时,我收到错误 "not found: value YotascaleCostProcessing",即使 YotascaleCostProcessing 的导入在那里。唯一可行的方法是当我这样做时:new YotascaleCostProcessing().YotascaleCostProcessing.INTERNAL_COST_UPDATES

package com.yotascale.service.cost.setup;
import com.yotascale.YotascaleCostProcessing
class MetadataNotificationConfiguringActor(message:Message) extends UntypedActor {

def configureBucket() = {
 val realtimeupdates = QueueService.getQueueURL(YotascaleCostProcessing.INTERNAL_COST_REQUESTS)   
}
}

您只需输入

Foo.counter

喜欢

import test.Foo
object Test extends App {
  println(Foo.counter)
}

package test
object Foo {
    var counter = 0
}

您的问题是您的对象定义在 class 定义中。对象在 Scala 中只是单例 class,所以你的定义就像

class YotascaleCostProcessing extends YotascaleActorSystem{
  class YotascaleCostProcessing$ {
    val INTERNAL_COST_REQUESTS = "internal-cost-requests"
    val INTERNAL_COST_UPDATES = "internal-cost-updates"
  }
  val YotascaleCostProcessing = new YotascaleCostProcessing$()
}

如果没有 YotascaleCostProcessing 实例,您将无法访问它