Mam klasy w Scala, który obecnie jest skonstruowany w sposób standardowy:Scala Konstruktor Deprecation
class Test(int : Int)
{
override def toString() = "Test: %d".format(int)
}
Jednak chciałbym, aby przejść nad budową pośrednią poprzez obiektu towarzyszącego. Ponieważ biblioteka, którą modyfikuję, jest używana przez innych, nie chcę, aby konstruktor był prywatny od razu. Zamiast tego chciałbym go wycofać, a następnie wrócić i uczynić go prywatnym, gdy tylko ludzie będą mieli szansę zmienić ich użycie. Więc zmodyfikowałem swój kod w ten sposób:
object Test
{
def apply(int : Int) = new Test(int)
}
@deprecated("Don't construct directly - use companion constructor", "09/04/13")
class Test(int : Int)
{
override def toString() = "Test: %d".format(int)
}
To jednak powoduje, że cała klasa przestaje istnieć.
scala> Test(4)
<console>:10: warning: class Test in package foo is deprecated: Don't construct directly - use companion constructor
val res0 =
^
res0: com.foo.Test = Test: 4
Czy ktoś wie, czy Scala wspiera Wycofanie konstruktorów, a jeśli tak, jak to się robi?
(edytowane) To działa, ale nie jest absolutnie idealne, ponieważ podczas importowania tej klasy pojawia się ostrzeżenie o wycofaniu, ponieważ obiekt towarzyszący wywołuje przestarzałego konstruktora - jakiś pomysł na jego obejście? – paulmdavies
Czy na pewno? Powinieneś otrzymać ostrzeżenie podczas kompilacji 'Test', ale nie podczas importowania. –
Masz rację - tylko przy kompilacji. – paulmdavies