Pergunta

O título basicamente diz isso.

Existe uma maneira de usar o tipo de e.g.new Object {def foo = "bar"} em uma chamada isInstanceOf[<structural_type_here>]?

Foi útil?

Solução

Os tipos estruturais não funcionam com isInstanceOf.Da mesma forma, as correspondências de padrão com tipos estruturais não têm sentido (elas sempre correspondem).

Geralmente, a culpa é do apagamento do tipo, mas mesmo na ausência do apagamento não funcionaria, já que a JVM não entende os tipos estruturais.

Por outro lado, Scala poderia ter sido inteligente o suficiente para fazer a verificação de tipo estrutural funcionar por meio de apagamento.

Outras dicas

Eu gostaria de dizer que você pode usar um alias de tipo:

type HasFooMethod = { def foo: String }
val v = new Object {def foo = "bar"}
v.isInstanceOf[HasFooMethod]

Mas isso sempre retornará verdadeiro, graças ao apagamento.

Portanto, você pode usar reflexão ou apenas tentar passar o objeto para um método que toma um tipo estrutural como parâmetro - o compilador irá então errar se não for válido.

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