Как использовать структурные типы в вызовах isInstanceOf? - PullRequest
1 голос
/ 30 января 2011

Название в основном говорит об этом.

Есть ли способ использовать, например, new Object {def foo = "bar"} в вызове isInstanceOf[<structural_type_here>]?

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Структурные типы не будут работать с isInstanceOf. Аналогично, сопоставление с образцом структурных типов не имеет смысла (они всегда совпадают).

Обычно это связано с стиранием типов, но даже при отсутствии стирания это не сработает, поскольку JVM не понимает структурные типы.

С другой стороны, Scala мог бы быть достаточно умным, чтобы заставить проверку типа конструкции работать при стирании.

3 голосов
/ 30 января 2011

Я бы хотел сказать, что вы можете использовать псевдоним типа:

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

Но это всегда вернется, благодаря стиранию.

Таким образом, вы можете использовать отражение или просто попытаться передать объект методу, принимающему структурный тип в качестве параметра - тогда компилятор выдаст ошибку, если он недопустим.

...