Доступ к переменной класса-компаньона из другого класса
Я действительно новичок в скале. Я пытаюсь получить доступ к переменной класса компаньона за пределами класса. Как мне это сделать, если это вообще возможно без создания экземпляра класса.
В следующем примере я могу получить доступ к INTERNAL_COST_REQUESTS из класса YotascaleCostProcessing
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)
}
}
Когда я выполняю YotascaleCostProcessing.INTERNAL_COST_UPDATES из другого класса в другом пакете, я получаю сообщение об ошибке "not found: value YotascaleCostProcessing", даже если импорт для YotascaleCostProcessing существует. Единственный способ это работает, когда я делаю это: новый 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)
}
}
1 ответ
Вы можете просто напечатать
Foo.counter
лайк
import test.Foo
object Test extends App {
println(Foo.counter)
}
а также
package test
object Foo {
var counter = 0
}
Ваша проблема в том, что ваше определение объекта находится внутри определения класса. Объект - это просто одноэлементный класс в Scala, поэтому ваше определение похоже на
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