Domanda

Il titolo fondamentalmente lo dice.

Esiste un modo per utilizzare il tipo di e.g.new Object {def foo = "bar"} in una chiamata isInstanceOf[<structural_type_here>]?

È stato utile?

Soluzione

I tipi strutturali non funzioneranno con isInstanceOf.Allo stesso modo, le corrispondenze di pattern con i tipi strutturali sono prive di significato (corrispondono sempre).

Questo di solito è attribuito alla cancellazione del tipo, ma anche in assenza di cancellazione non funzionerebbe, poiché JVM non comprende i tipi strutturali.

D'altra parte, Scala avrebbe potuto essere abbastanza intelligente da far funzionare il controllo del tipo strutturale attraverso la cancellazione.

Altri suggerimenti

Vorrei dire che puoi utilizzare un alias di tipo:

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

Ma tornerà sempre vero, grazie alla cancellazione.

Quindi puoi usare la reflection o semplicemente provare a passare l'oggetto a un metodo che prende un tipo strutturale come parametro: il compilatore quindi commetterà un errore se non è valido.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top