27

私はあなたが無名関数を作成し、コンパイラにその戻り型を推測させることができることを知っています:

val x = () => { System.currentTimeMillis }

静的型付けのためだけに、その戻り型も指定することは可能ですか?それは物事をより明確にするだろうと思います。

4

3 に答える 3

57
val x = () => { System.currentTimeMillis } : Long
于 2010-01-18T19:10:52.770 に答える
29

私の意見では、物事をより明確にしようとしている場合は、関数の結果ではなく、型注釈を追加して、識別子xの期待値を文書化する方がよいと思います。

val x: () => Long = () => System.currentTimeMillis

次に、コンパイラーは、右側の関数がその期待を満たしていることを確認します。

于 2010-01-18T19:19:47.523 に答える
11

ファビアンは簡単な方法を示しましたが、砂糖のマイクロ管理が好きな場合は、次のような方法があります。

val x = new (() => Long) {
  def apply() = System.currentTimeMillis
}

また

val x = new Function0[Long] {
  def apply() = System.currentTimeMillis
}

あるいは

val x = new {
  def apply(): Long = System.currentTimeMillis
}

ほとんどの場合、関数から派生しても違いはなく、適用があるかどうかだけです。

于 2010-01-19T01:16:24.990 に答える