13

現在、標準的な方法で構築されている Scala のクラスがあります。

class Test( int : Int )
{
    override def toString() = "Test: %d".format( int ) 
}

ただし、コンパニオン オブジェクトを介した間接的な構築に移行したいと考えています。私が変更しているライブラリは他の人によって使用されているため、コンストラクターをすぐに非公開にしたくありません。代わりに、私はそれを廃止し、人々が使用法を変更する機会を得たら、戻ってきて非公開にしたいと考えています. そこで、コードを次のように変更しました。

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 ) 
}

ただし、これはクラス全体を非推奨にします。

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

Scala がコンストラクターの非推奨をサポートしているかどうかは誰にもわかりません。

4

2 に答える 2