Pergunta

Eu sei que você pode criar uma função anônima e fazer com que o compilador inferir seu tipo de retorno:

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

Apenas para a digitação estática, é possível especificar seu tipo de retorno também? Eu acho que deixaria as coisas muito mais claras.

Foi útil?

Solução

Na minha opinião, se você estiver tentando tornar as coisas mais claras, é melhor documentar a expectativa no identificador X adicionando uma anotação de tipo lá, e não o resultado da função.

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

Em seguida, o compilador garantirá que a função no lado direito atenda a essa expectativa.

Outras dicas

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

Fabian deu o caminho direto, mas de algumas outras maneiras, se você gosta de microgerenciar açúcar, incluir:

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

ou

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

ou até

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

Como na maioria das situações, não faz diferença se descer da função, apenas se ela tem uma aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top