Если у меня есть следующий класс case с частным конструктором, и я не могу получить доступ к методу apply в сопутствующем объекте.Частный конструктор класса case Scala, но общедоступный метод применения
case class Meter private (m: Int)
val m = Meter(10) // constructor Meter in class Meter cannot be accessed...
Есть ли способ, чтобы использовать класс случая с собственным конструктором, но сохранить сгенерированный применить-метод в сопутствующей общественности?
Я знаю, что нет никакой разницы (в моем примере) между двумя вариантами:
val m1 = new Meter(10)
val m2 = Meter(10)
, но я хочу, чтобы запретить первый вариант.
- редактировать -
Удивительно следующие работы (но не совсем то, что я хочу):
val x = Meter
val m3 = x(10) // m3 : Meter = Meter(10)
Какую версию Scala вы используете? Я просто попробовал это в своем 2.10.0 REPL и 'val m2 = Meter (10)' не дает никаких ошибок] –
@LuigiPlinge Я использую Scala 2.10.3 – Erik
Похоже, что это строка 'case class Meter private (m: Int) ', который вызывает ошибку, когда объявлен как объект верхнего уровня (http://scalafiddle.net/console/eb6fdc36b281b7d5eabf33396c2683a2), но он работает, когда объявлен в рамках другого объекта или REPL (http://scalafiddle.net/console/cdc0d6e63aa8e41c89689f54970bb35f) –