1. ホーム
  2. scala

[解決済み] Scala の "new" キーワード

2023-01-20 17:32:40

質問

Scalaでオブジェクトを作成する際、どのような場合にnewキーワードを適用すればいいのでしょうか?Javaオブジェクトをインスタンス化しようとするときだけでしょうか?

どのように解決するのですか?

を使用します。 new キーワードを使用します。 class 自身のコンストラクタを参照したい場合に使用します。

class Foo { }

val f = new Foo

省略 new を参照する場合は、コンパニオン・オブジェクトの apply メソッドを使用します。

class Foo { }
object Foo {
    def apply() = new Foo
}

// Both of these are legal
val f = Foo()
val f2 = new Foo

ケースクラスを作った場合

case class Foo()

Scalaは密かにコンパニオン・オブジェクトを作成し、このように変身させます。

class Foo { }
object Foo {
    def apply() = new Foo
}

というわけで、以下のようなことができます。

f = Foo()

最後に、コンパネの apply メソッドがコンストラクタのプロキシでなければならないというルールはないことに留意してください。

class Foo { }
object Foo {
    def apply() = 7
}

// These do different things
> println(new Foo)
test@5c79cc94
> println(Foo())
7

また、Javaクラスについて言及されましたが、そうです。 を持つコンパニオンオブジェクトはほとんどありません。 apply メソッドを持つコンパニオンオブジェクトはほとんどありません。 new と実際の クラスのコンストラクタを使用します。