2016-02-23 5 views
0

Я хочу создать одноэлементный объект для своего приложения, но я хочу инициализировать его из другого объекта.Scala: Создание объекта singleton путем вызова конструктора

Для экс:

object A{ 
val x = 10 
val b = B(x) 
} 

object B(y:Int){ 
var z = y 
} 

Но это не будет работать, так как объект оленья кожа имеет конструктор. Мне нужно инициализировать объект из другого объекта, так как val x (в приведенном выше примере) будет известен во время выполнения.

Любое обходное решение для этого?

+1

Возможный дубликат [Как инициализировать объекты vals со значениями, известными только во время выполнения?] (Http://stackoverflow.com/questions/8782448/how-do-i-initialize-object-vals-with-values- known-only-at-runtime) – 757071

+0

Дубликат http://stackoverflow.com/q/27801150/1296806, но это не большой вариант использования, b/c, вы хотите избежать мысли об порядке инициализации. –

ответ

1

Объект не имеет конструктора, потому что он инициализирован статически (как только он загружен). То, что вы, вероятно, ищет это простой класс:

class B(y: Int) { 
    var z = y 
} 

Если вам действительно нужен синглтон, почему бы вам необходимо инициализировать его с другого объекта?

+0

Мне нужно инициализировать его из другого объекта, потому что свойство одноэлементного объекта будет известно во время выполнения. И это требование приложения иметь одноэлементный объект – Alok

+0

. Тогда почему бы вам просто не изменить значение свойства при создании другого объекта? – irundaia

+0

Это вариант. Но я думал, если будет какой-то более чистый способ. спасибо за предложения :) – Alok

0

Объекты в scala лениво загружены, то есть они будут созданы только после того, как это необходимо.

Если вы не используете объект перед запросом конструктора, вы можете просто иметь функцию init, которая будет действовать как конструктор, тогда объект будет создан.

Смежные вопросы