Question

Le titre dit essentiellement cela.

Y at-il un moyen d'utiliser le type d'e. g. new Object {def foo = "bar"} dans un appel isInstanceOf[<structural_type_here>]?

Était-ce utile?

La solution

Des types structuraux ne fonctionnera pas avec isInstanceOf. De même, les matches de motif à des types de structure sont vides de sens (ils correspondent toujours).

Ceci est généralement attribué à un effacement de type, mais même en l'absence d'effacement, il ne fonctionnerait pas, car JVM ne comprend pas les types de structure.

D'autre part, Scala peut ont été assez intelligent pour faire fonctionner la vérification de type structurel par l'effacement.

Autres conseils

Je voudrais dire que vous pouvez utiliser un alias de type:

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

Mais ça va revenir toujours vrai, grâce à l'effacement.

Vous pouvez utiliser la réflexion, ou tout simplement essayer de passer l'objet à une méthode prenant un type de structure en tant que paramètre - le compilateur alors l'erreur si elle n'est pas valide

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top