Ho una classe in Scala, che è attualmente costruito in modo standard:Scala Constructor Deprecation
class Test(int : Int)
{
override def toString() = "Test: %d".format(int)
}
Tuttavia, mi piacerebbe passare al costruzione indiretta tramite un oggetto associato. Dato che la libreria che sto modificando è usata da altri, non voglio rendere subito privato il costruttore. Invece, mi piacerebbe deprecarlo e poi tornare e renderlo privato una volta che le persone hanno avuto la possibilità di cambiare il loro utilizzo. Così ho modificato il mio codice in questo modo:
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)
}
Tuttavia, questo depreca l'intera classe.
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
Qualcuno sa se Scala supporta la deprecazione di costruttori e, se sì, come è fatto?
(modificato) Funziona, ma non è assolutamente ideale, dal momento che si riceve un avviso di deprecazione durante l'importazione di questa classe, dal momento che l'oggetto associato chiama il costruttore deprecato - qualsiasi idea su quella strada? – paulmdavies
Sei sicuro? Si dovrebbe ricevere un avvertimento durante la compilazione di 'Test', ma non durante l'importazione. –
Hai ragione - solo sulla compilazione. – paulmdavies