0

以下のコードを実行すると、apply メソッドが呼び出されません。

ジャワ:

public class Driver {

    public static void main(String args[]){

        new parallel.TestData();
    }

}

スカラ:

package parallel

class TestData {
    def apply() = {
      println("in apply method ")
    }
}

私が使用する場合:

new parallel.TestData().apply();

その後、apply メソッドは正しく呼び出されますが、apply() メソッドは上記のコードから暗黙的に呼び出されるべきではありませんか? apply メソッドが正しく実装されていませんか?

4

1 に答える 1

2

Scala では、コンストラクターapplyメソッドの間に違いがあります。apply メソッドがコンストラクターのように動作することを期待しているようです。ただし、コンストラクターは という名前のメソッドdef this(...)です。したがって、コンストラクターを定義していません。

apply メソッドは、他のメソッドと同じように名前を使用して ( .apply())、または括弧を使用して( ) 呼び出すことができます()。クラスの新しいインスタンスを作成した後でも、apply メソッドを呼び出す必要があります。

したがって、クラスの新しいインスタンスを作成して呼び出すapplyことができます。

new parallel.TestData()()
//                   ^  ^---- apply method
//                   |------- constructor

または、クラスの代わりにオブジェクトを実装できます:

object TestData {
    def apply() = {
      println("in apply method ")
    }
}
parallel.TestData()

更新: Java から Scala コードを呼び出すときは、最初のメソッドに固執する必要があります。Java は apply メソッドのシンタックス シュガーを追加しないため、明示的な呼び出しのオプションが残されますnew parallel.TestData().apply()

于 2013-04-23T14:00:30.610 に答える