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