标题基本上是这样说的。
有没有办法使用e的类型。 G。 new Object {def foo = "bar"}
来电中isInstanceOf[<structural_type_here>]
?
答案 0 :(得分:3)
我想说你可以使用类型别名:
type HasFooMethod = { def foo: String }
val v = new Object {def foo = "bar"}
v.isInstanceOf[HasFooMethod]
但是,由于擦除,这将永远归于真实。
因此,您可以使用反射,或者只是尝试将对象传递给以结构类型作为参数的方法 - 如果编译器无效,编译器将会出错。
答案 1 :(得分:3)
结构类型不适用于isInstanceOf
。同样,模式匹配结构类型是没有意义的(它们总是匹配)。
这通常归咎于类型擦除,但即使没有擦除也无法工作,因为JVM不了解结构类型。
另一方面,Scala 可以足够聪明,可以通过擦除来进行结构类型检查。