Como usar tipos estruturais em chamadas isInstanceOf?
-
27-10-2019 - |
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>]
?
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.