Pregunta

El título básicamente lo dice.

¿Hay alguna forma de utilizar el tipo de e.gramo.new Object {def foo = "bar"} en una llamada isInstanceOf[<structural_type_here>]?

¿Fue útil?

Solución

Los tipos estructurales no funcionarán con isInstanceOf.Del mismo modo, las coincidencias de patrones con tipos estructurales no tienen sentido (siempre coinciden).

Esto generalmente se atribuye al borrado de tipos, pero incluso en ausencia de borrado no funcionaría, ya que JVM no comprende los tipos estructurales.

Por otro lado, Scala podría haber sido lo suficientemente inteligente como para hacer que la verificación de tipos estructurales funcionara mediante el borrado.

Otros consejos

Me gustaría decir que puede usar un alias de tipo:

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

Pero eso siempre será verdadero, gracias al borrado.

Por lo tanto, puede usar la reflexión o simplemente intentar pasar el objeto a un método tomando un tipo estructural como parámetro; el compilador generará un error si no es válido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top